Como obter o comando que invocou uma tarefa com a lista de tarefas?

12

O gerenciador de tarefas do Windows tem uma coluna chamada Linha de comando que mostra o comando que iniciou a tarefa em questão, com todos os parâmetros e opções, por exemplo:

test.exe -V -A 127.0.0.1 -P 6062

Agora eu tenho que identificar uma certa tarefa que está escutando em uma determinada porta e / ou foi chamada com uma certa combinação de switches. Meu objetivo é fechar a tarefa selecionada, mas não outras, por isso, se houver várias tarefas test.exe em execução, não posso simplesmente fechar todas as tarefas retornadas por:

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

Infelizmente, parece que nem tasklist nem pslist ( aqui ) é capaz para retornar o campo Linha de comando . Como posso superar esse problema?

    
por István Zachar 02.12.2013 / 15:13

1 resposta

25

Que tal este:

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

E se você fizer isso, você também terá o ProcessId para matar:

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

wmic também possui um comutador para saída para csv. Então:

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

Nota: Se você receber um erro com o último ( Invalid XSL format (or) file name ), precisará copiar csv.xml de %WINDIR%\System32\wbem\en-US para %WINDIR%\System32\wbem . Você pode ler sobre esse bug aqui .

Você também pode usar o PowerShell:

Get-WmiObject win32_process -Filter "name like '%test.exe'"|select CreationDate,ProcessId,CommandLine|ft -AutoSize'
    
por 02.12.2013 / 16:25