
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