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

18

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

test.exe -V -A 127.0.0.1 -P 6062

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

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

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

Иштван Захар
источник
Может быть, вы можете сделать что-то netstat -aon | grep \.0:6062для порта 6062, и последний столбец будет PID вашей программы. Не уверен, что этого достаточно для вас. tasklist /FI "PID eq <PID>"даст ваш исполняемый файл снова.
Рик
@Rik К сожалению, этого недостаточно, поскольку самого порта недостаточно для определения правильной задачи, поэтому необходимо также видеть аргументы командной строки.
Иштван Захар
Не могу представить, чтобы несколько программ прослушивали один и тот же порт ... :) Но должна быть возможность получить параметры ... process explorerSysinternals может показать их в графическом интерфейсе. Так что информация должна быть где-то.
Рик
У вас есть возможность использовать команду powershell? Как <<< Get-WmiObject win32_process -Filter "name like '% test.exe'" | выберите CreationDate, ProcessId, CommandLine | ft -AutoSize` >>> См. Здесь
Rik
@Rik, порт, конечно, другой, но я должен извлечь аргументы командной строки и проверить, является ли задача той, которую мне нужно убить.
Иштван Захар

Ответы:

35

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

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`
Rik
источник
Спасибо, вот и все, wmicрешает проблему, и на этом день заканчивается. :)
Иштван Захар
1
Идеальный - это фактически дает полную командную строку. В диспетчере задач он показывает только первые 300 символов или около того.
ArtOfWarfare