タスクリストでタスクを呼び出したコマンドを取得する方法は?


18

Windowsタスクマネージャーには、コマンドラインというラベルの付いた列があり、特定のタスクを開始したコマンドを、すべてのスイッチとパラメーターとともに表示します。次に例を示します。

test.exe -V -A 127.0.0.1 -P 6062

ここで、特定のポートでリッスンしている、または特定のスイッチの組み合わせで呼び出された特定のタスクを特定する必要があります。私の目的は、選択したタスクを閉じることですが、他のタスクは閉じないことです。そのため、test.exe実行中のタスクが複数ある場合、以下によって返されるすべてのタスクを単純に閉じることはできません。

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

残念ながら、どちらtasklistpslistここではコマンドラインフィールドを返すことができないようです。どうすればこの問題を克服できますか?


おそらくnetstat -aon | grep \.0:6062ポート6062で何かをすることができ、最後の列はプログラムのPIDになります。それで十分かどうかわかりません。tasklist /FI "PID eq <PID>"再び実行可能ファイルを提供します。
リック

@Rik悲しいことに、ポート自体では正しいタスクを識別するのに十分ではないため、それだけでは不十分です。そのため、コマンドライン引数も確認する必要があります。
イシュトヴァンザカル

同じポートでリッスンしている複数のプログラムを想像することはできません... :)しかし、パラメータを取得することが可能でなければなりません... process explorerSysinternalsからこれらをGUIで表示できます。そのため、情報はどこかにある必要があります。
リック

PowerShellコマンドを使用していますか?フィート-AutoSize` >>>参照してください| <<<のGet-WmiObjectコマンドWin32_Processに-Filter " '%のTEST.EXE'のような名前"のような|のCreationDate、PROCESSIDやコマンドを選択し、ここで
の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

注:あなたが最後の1でエラーが発生した場合は(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`

おかげで、wmicそれで問題は解決し、これで一日は終わりです。:)
イスヴァン・ザカル

1
完璧-これは実際に完全なコマンドラインを提供します。タスクマネージャーでは、最初の300文字程度しか表示されません。
-ArtOfWarfare
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.