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 中,上面的最佳答案不起作用,因为wmic process
输出中没有“标题”列,因此找不到结果。 (是的,我知道 wmic 在 Windows 11 中已被弃用。它仍然有效。)
相反,确实还有其他列可用于该 WHERE 子句,并且它们可通过 wmic 获得process list /?
。其中当然包括name
(用于进程名称)--以及processid
上面提到的(用于 pid),因此这对我来说是有效的:
wmic process where name="test.exe" get commandline,processid
还有一件事:我发现我必须运行提升的命令提示符(以管理员身份)才能看到命令行否则输出显示命令行为空:
CommandLine ProcessId
10496