Как получить команду, вызвавшую задачу с помощью tasklist?

Как получить команду, вызвавшую задачу с помощью tasklist?

В диспетчере задач Windows есть столбец с надписьюКомандная строкакоторая показывает команду, запустившую данную задачу, со всеми переключателями и параметрами, например:

test.exe -V -A 127.0.0.1 -P 6062

Теперь мне нужно определить определенную задачу, которая прослушивает определенный порт и/или была вызвана с определенной комбинацией переключателей. Моя цель — закрыть выбранную задачу, но не другие, поэтому, если запущено несколько test.exeзадач, я не могу просто закрыть все задачи, возвращенные:

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

К сожалению, похоже, что ни то, tasklistни другое pslist(здесь) может вернутьКомандная строкаполе. Как мне преодолеть эту проблему?

решение1

Как насчет этого:

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

И если вы сделаете это, вы также получите ProcessId для завершения:

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

wmicтакже есть переключатель для вывода в csv. Итак:

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

Примечание: Если вы получили ошибку с последним ( Invalid XSL format (or) file name), вам нужно скопировать csv.xmlиз %WINDIR%\System32\wbem\en-USв %WINDIR%\System32\wbem. Вы можете прочитать об этой ошибкездесь.


Вы также можете использовать PowerShell:

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

решение2

PowerShell 7:

get-process test | % commandline

решение3

По крайней мере, в Windows 11 верхний ответ выше не сработал, поскольку в выводе нет столбца «caption» wmic process, поэтому результат не был найден. (И да, я понимаю, что wmic устарел в Windows 11. Он все еще работает.)

Вместо этого, действительно есть другие столбцы, которые вы могли бы использовать для этого предложения WHERE, и они доступны с wmic process list /?. Среди них, конечно, name(для имени процесса) — и тот processid(для pid), упомянутый выше, так что это сработало для меня вместо этого:

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

Еще кое-что:Я обнаружил, что мне нужно запустить командную строку с повышенными привилегиями (как администратор), чтобы увидеть командную строку.. В противном случае вывод показывал пустую командную строку:

CommandLine  ProcessId
             10496

Связанный контент