タスクリストを使用してタスクを呼び出したコマンドを取得するにはどうすればよいでしょうか?

タスクリストを使用してタスクを呼び出したコマンドを取得するにはどうすればよいでしょうか?

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

wmiccsv に出力するためのスイッチもあります。つまり:

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

関連情報