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?


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`

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.