
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
出力に「キャプション」列がないため、上記の一番上の回答は機能せず、結果が見つかりませんでした。(はい、Windows 11 では wmic が非推奨になっていることは承知しています。それでも機能します。)
代わりに、その WHERE 句に使用できる他の列が実際にあり、それらは wmic で利用できますprocess list /?
。その中には、もちろんname
(プロセス名用) と、processid
上で述べた (pid 用) 列があるので、代わりにこれが機能しました。
wmic process where name="test.exe" get commandline,processid
もう一つ:コマンドラインを表示するには、管理者としてコマンドプロンプトを実行する必要があることがわかりました。それ以外の場合、出力にはコマンドラインが空として表示されます。
CommandLine ProcessId
10496