
Wie kann ich den Prozessnamen aus dem Computerspeicher abrufen, indem ich eine von der Prozessbeschreibung abhängige Schleife verwende?
Beispiel:
Mein Programmname im Speicher ist „dev.exe“ und seine Beschreibung ist „ein Tool zur Unterstützung von PHP-Entwicklern“.
Gibt es eine Möglichkeit, meinen Prozessnamen anhand der Prozessbeschreibung zu finden, selbst wenn der Benutzer den Namen ändert?
Können wir dies mit Autoit, cmd oder wmic machen?
Antwort1
Ich habe diesen Link gefunden, der versucht, das gleiche Problem zu lösen. Aufbauend auf der vorhandenen Antwort eine einfache Zeile, die zu einem vorhandenen Skript hinzugefügt werden kann:
Get-Process | where {$_.Description -like '*note*'} | select Path, Description, ProcessName
Beispielausgabe:
Path Description ProcessName
---- ----------- -----------
C:\Windows\system32\notepad.exe Notepad notepad
C:\Program Files\Microsoft Office\root\Office16\ONENOTE.EXE Microsoft OneNote ONENOTE
C:\Program Files\Microsoft Office\root\Office16\ONENOTEM.EXE Send to OneNote Tool ONENOTEM
Antwort2
Wie finde ich den Namen eines laufenden Prozesses anhand seines Eigenschaftswerts „Dateibeschreibung“?
Verbesserte Lösung(danke an @BenN nach der Diskussion im Chat):
Verwenden Sie das folgende PowerShell-Skript (Get-ProcessName.ps1).
$_match=$Args[0].ToLowerInvariant()
Get-Process | where {$_.Description -ne $null -and $_.Description.ToLowerInvariant().Contains($_match)} | select Path, Description, ProcessName
Anmerkungen:
- Der erste an das Skript übergebene Parameter wird verwendet, um innerhalb des Eigenschaftswerts „Dateibeschreibung“ eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung durchzuführen.
- Die Übergabe von „notepad“ trifft sowohl auf „notepad.exe“ als auch auf „notepad++.exe“ zu, wenn beide ausgeführt werden.
Beispielausgabe:
PS F:\test> .\Get-ProcessName notepad
Path Description ProcessName
---- ----------- -----------
C:\Windows\system32\notepad.exe Notepad notepad
E:\LiberKey\Apps\Notepad++\App\Notepad++\notepad++.exe Notepad++ : a free (GNU) source code editor notepad++
E:\LiberKey\Apps\Notepad++\App\Notepad++\notepad++.exe Notepad++ : a free (GNU) source code editor notepad++
PS F:\test>
Ursprüngliche Lösung:
Verwenden Sie das folgende Powershell-Skript (Get-ProcessName.ps1).
$_name=$Args[0]
$_match="*"+$Args[0]+"*"
Get-Process | ForEach {
if ($_.Path) {
$_filedescription=(Get-Item $_.Path).VersionInfo.FileDescription
if ($_filedescription -like $_match) {
Write-Output "File Description: '$_filedescription', Process Path: '$($_.Path)', Process Name: '$($_.ProcessName)'"
}
}
}
Anmerkungen:
- Der erste an das Skript übergebene Parameter wird verwendet, um innerhalb des Eigenschaftswerts „Dateibeschreibung“ eine Suche mit Platzhaltern und ohne Berücksichtigung der Groß- und Kleinschreibung durchzuführen.
- Wenn Sie es übergeben, wird mit der Eigenschaft „Dateibeschreibung“
string
gesucht*string*
und eine Übereinstimmung gefunden.string
- Die Übergabe von „notepad“ trifft sowohl auf „notepad.exe“ als auch auf „notepad++.exe“ zu, wenn beide ausgeführt werden.
- Das Skript gibt die „Dateibeschreibung“, den „Prozesspfad“ und den „Prozessnamen“ aus.
Beispielausgabe:
PS F:\test> .\Get-ProcessName notepad
File Description: 'Notepad', Process Path: 'C:\Windows\system32\notepad.exe', Process Name: 'notepad'
File Description: 'Notepad++ : a free (GNU) source code editor', Process Path: 'E:\LiberKey\Apps\Notepad++\App\Notepad++\notepad++.exe', Process Name: 'notepad++'
File Description: 'Notepad++ : a free (GNU) source code editor', Process Path: 'E:\LiberKey\Apps\Notepad++\App\Notepad++\notepad++.exe', Process Name: 'notepad++'
PS F:\test>
Anmerkungen:
- „notepad++.exe“ hat beim Ausführen der portablen Version zwei Prozesse im Speicher.