Wie erhalte ich den Befehl, der eine Aufgabe mit tasklist aufgerufen hat?

18

Der Windows-Task-Manager verfügt über eine Spalte mit der Bezeichnung Befehlszeile , in der der Befehl angezeigt wird, mit dem die angegebene Task gestartet wurde, einschließlich aller Optionen und Parameter. Beispiel:

test.exe -V -A 127.0.0.1 -P 6062

Jetzt muss ich eine bestimmte Aufgabe identifizieren, die auf einem bestimmten Port lauscht und / oder mit einer bestimmten Switch-Kombination aufgerufen wurde. Mein Ziel ist es, die ausgewählte Aufgabe zu schließen, aber nicht andere. Wenn also mehrere test.exeAufgaben ausgeführt werden, kann ich nicht einfach alle Aufgaben schließen, die zurückgegeben wurden von:

tasklist /fo csv /nh /fi "imagename eq test.exe"

Leider scheint es weder tasklistnoch pslist( hier ) möglich zu sein, das Befehlszeilenfeld zurückzugeben . Wie kann ich dieses Problem lösen?

István Zachar
quelle
Vielleicht können Sie etwas netstat -aon | grep \.0:6062für Port 6062 tun und die letzte Spalte wäre die PID Ihres Programms. Nicht sicher, ob das für Sie ausreicht. tasklist /FI "PID eq <PID>"würde deine ausführbare Datei wieder geben.
Rik
@Rik Das ist leider nicht ausreichend, da der Port selbst nicht ausreicht, um die richtige Aufgabe zu identifizieren. Daher müssen auch die Befehlszeilenargumente angezeigt werden.
István Zachar
Ich kann mir nicht vorstellen, dass mehrere Programme am selben Port lauschen ... :) Aber es muss möglich sein, die Parameter process explorerabzurufen ... von Sysinternals können diese in der GUI angezeigt werden. Also muss die Info irgendwo sein.
Rik
Hast du Verwendung für einen Powershell-Befehl? Gefällt mir <<< Get-WmiObject win32_process -Filter "Name wie '% test.exe'" | wähle CreationDate, ProcessId, CommandLine | ft -AutoSize` >>> Siehe hier
Rik
@Rik, der Port ist natürlich anders, aber ich muss die Befehlszeilenargumente extrahieren, um zu prüfen, ob die Aufgabe die ist, die ich töten muss.
István Zachar

Antworten:

35

Wie wäre es mit diesem:

wmic process where caption="test.exe" get commandline

Und wenn Sie dies tun, erhalten Sie auch die ProcessId, um zu töten:

wmic process where caption="test.exe" get commandline,processid

wmichat auch einen schalter zur ausgabe an csv. So:

wmic /output:c:\temp\proc.csv process where caption="test.exe" get commandline,processid /format:csv

Hinweis: Wenn Sie einen Fehler mit dem letzten erhalten ( Invalid XSL format (or) file name) müssen Sie kopieren csv.xmlaus %WINDIR%\System32\wbem\en-USzu %WINDIR%\System32\wbem. Sie können über diesen Fehler hier lesen .


Sie könnten auch PowerShell verwenden:

Get-WmiObject win32_process -Filter "name like '%test.exe'"|select CreationDate,ProcessId,CommandLine|ft -AutoSize`
Rik
quelle
Danke, das war's, wmiclöst das Problem und damit ist der Tag zu Ende. :)
István Zachar
1
Perfekt - das gibt eigentlich die volle Kommandozeile. Im Task-Manager werden nur die ersten 300 Zeichen angezeigt.
ArtOfWarfare