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

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

O gerenciador de tarefas do Windows possui uma coluna chamadaLinha de comandoque mostra o comando que iniciou a tarefa determinada, com todas as opções e parâmetros, por exemplo:

test.exe -V -A 127.0.0.1 -P 6062

Agora tenho que identificar uma determinada tarefa que está escutando em uma determinada porta e/ou foi chamada com uma determinada combinação de switches. Meu objetivo é fechar a tarefa selecionada, mas não outras; portanto, se houver várias test.exetarefas 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 tasklistnem pslist(aqui) é capaz de retornar oLinha de comandocampo. Como posso superar esse problema?

Responder1

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

wmictambém tem uma opção 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), será necessário copiar csv.xmlde %WINDIR%\System32\wbem\en-USpara %WINDIR%\System32\wbem. Você pode ler sobre esse bugaqui.


Você também pode usar o PowerShell:

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

Responder2

Power Shell 7:

get-process test | % commandline

Responder3

No Windows 11, pelo menos, a resposta principal acima não funcionou, pois não há coluna “legenda” na wmic processsaída, portanto não foi encontrado nenhum resultado. (E sim, sei que o wmic está obsoleto no Windows 11. Ele ainda funciona.)

Em vez disso, existem outras colunas que você pode usar para essa cláusula WHERE e estão disponíveis com wmic process list /?. Entre eles estão, é claro name(para o nome do processo) - e aquele processid(para o pid) mencionado acima, então funcionou para mim:

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

Mais uma coisa:Descobri que precisava executar um prompt de comando elevado (como administrador) para ver a linha de comando. Caso contrário, a saída mostrou a linha de comando vazia:

CommandLine  ProcessId
             10496

informação relacionada