Come ottenere il comando che ha invocato un'attività con tasklist?


18

Il task manager di Windows ha una colonna con l'etichetta Command Line che mostra il comando che ha avviato l'attività specificata, con tutte le opzioni e i parametri, ad esempio:

test.exe -V -A 127.0.0.1 -P 6062

Ora devo identificare un determinato compito che è in ascolto su una determinata porta e / o è stato chiamato con una determinata combinazione di switch. Il mio obiettivo è chiudere l'attività selezionata, ma non altre, quindi se sono in test.exeesecuzione più attività, non posso semplicemente chiudere tutte le attività restituite da:

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

Sfortunatamente sembra che né tasklistpslist( qui ) sia in grado di restituire il campo della riga di comando . Come posso superare questo problema?


Forse puoi fare qualcosa con netstat -aon | grep \.0:6062per la porta 6062 e l'ultima colonna sarebbe il PID del tuo programma. Non sono sicuro che sia sufficiente per te. tasklist /FI "PID eq <PID>"darebbe di nuovo il tuo eseguibile.
Rik,

@Rik Purtroppo, ciò non è sufficiente, poiché la porta stessa non è sufficiente per identificare l'attività corretta, quindi è necessario vedere anche gli argomenti della riga di comando.
István Zachar,

Non riesco a immaginare più programmi in ascolto sulla stessa porta ... :) Ma deve essere possibile ottenere i parametri ... process explorerda Sysinternals può mostrarli nella GUI. Quindi le informazioni devono essere da qualche parte.
Rik,

Hai un comando per un comando PowerShell? Mi piace <<< Get-WmiObject win32_process -Filter "name like '% test.exe'" | seleziona CreationDate, ProcessId, CommandLine | ft -AutoSize` >>> Vedi qui
Rik

@Rik, la porta è ovviamente diversa, ma devo estrarre gli argomenti della riga di comando anche per verificare se l'attività è quella che devo uccidere.
István Zachar,

Risposte:


35

Che ne dici di questo:

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

E se lo fai, ottieni anche ProcessId a uccidere:

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

wmicha anche un interruttore per l'output in CSV. Così:

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

Nota: se viene visualizzato un errore con l'ultimo ( Invalid XSL format (or) file name), è necessario copiare csv.xmlda %WINDIR%\System32\wbem\en-USa %WINDIR%\System32\wbem. Puoi leggere questo bug qui .


Potresti anche usare PowerShell:

Get-WmiObject win32_process -Filter "name like '%test.exe'"|select CreationDate,ProcessId,CommandLine|ft -AutoSize`

Grazie, tutto qui, wmicrisolve il problema e questo conclude la giornata. :)
István Zachar,

1
Perfetto: questo in realtà fornisce l'intera riga di comando. In Task Manager, mostra solo i primi 300 caratteri circa.
ArtOfWarfare
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.