Comment obtenir la commande qui a appelé une tâche avec la liste des tâches?

18

Le gestionnaire de tâches Windows possède une colonne intitulée Ligne de commande qui montre la commande qui a démarré la tâche donnée, avec tous les commutateurs et paramètres, par exemple:

test.exe -V -A 127.0.0.1 -P 6062

Maintenant, je dois identifier une certaine tâche qui écoute sur un certain port et / ou a été appelée avec une certaine combinaison de commutateurs. Mon objectif est de fermer la tâche sélectionnée, mais pas les autres, donc s'il y a plusieurs test.exetâches en cours d'exécution, je ne peux pas simplement fermer toutes les tâches renvoyées par:

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

Malheureusement, tasklistni ni ni pslist( ici ) ne peut retourner le champ de ligne de commande . Comment puis-je surmonter ce problème?

István Zachar
la source
Vous pouvez peut-être faire quelque chose avec le netstat -aon | grep \.0:6062port 6062 et la dernière colonne serait le PID de votre programme. Je ne sais pas si cela vous suffit. tasklist /FI "PID eq <PID>"donnerait à nouveau votre exécutable.
Rik
@Rik Malheureusement, cela ne suffit pas, car le port lui-même n'est pas suffisant pour identifier la tâche correcte, il est donc nécessaire de voir les arguments de la ligne de commande aussi.
István Zachar
Je ne peux pas imaginer plusieurs programmes écoutant sur le même port ... :) Mais il doit être possible d'obtenir les paramètres ... process explorerde Sysinternals peut les afficher dans l'interface graphique. L'info doit donc être quelque part.
Rik
Avez-vous utilisé une commande powershell? Comme <<< Get-WmiObject win32_process -Filter "name like '% test.exe'" | select CreationDate, ProcessId, CommandLine | ft -AutoSize` >>> Voir ici
Rik
@Rik, le port est bien sûr différent, mais je dois également extraire les arguments de la ligne de commande pour vérifier si la tâche est celle que je dois tuer.
István Zachar

Réponses:

35

Celui-ci, ça va:

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

Et si vous faites cela, vous obtenez également le ProcessId à tuer:

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

wmicdispose également d'un commutateur de sortie en csv. Donc:

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

Remarque: Si vous obtenez une erreur avec le dernier ( Invalid XSL format (or) file name), vous devez copier csv.xmlde %WINDIR%\System32\wbem\en-USà %WINDIR%\System32\wbem. Vous pouvez lire ce bug ici .


Vous pouvez également utiliser PowerShell:

Get-WmiObject win32_process -Filter "name like '%test.exe'"|select CreationDate,ProcessId,CommandLine|ft -AutoSize`
Rik
la source
Merci, c'est ça, wmicrésout le problème, et cela conclut la journée. :)
István Zachar
1
Parfait - cela donne en fait la ligne de commande complète. Dans le gestionnaire de tâches, il n'affiche que les 300 premiers caractères environ.
ArtOfWarfare