
В диспетчере задач 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