web-dev-qa-db-ja.com

WindowsでPIDが指定されている場合、それを実行したコマンドライン命令を見つけるにはどうすればよいですか?

データベースでは、現在実行中のすべてのプロセスのリストと、それらを開始したsqlコマンドを取得できます。

Windowsボックスでも同様のことを行いたいのですが。

プロセスのリストは取得できますが、プロセスを開始したコマンドラインは取得できません。

私の質問は次のとおりです:WindowsでPIDを指定-それを実行したコマンドライン命令を見つけるにはどうすればよいですか

仮定:

  • Windows 7および同等のサーバー
27
Hawkeye

PowershellおよびWMI。

Get-WmiObject Win32_Process | Select ProcessId,CommandLine

または

Get-WmiObject -Query "SELECT CommandLine FROM Win32_Process WHERE ProcessID = 3352"

プロセスに関するこの情報にアクセスする権限が必要であることに注意してください。したがって、知りたいプロセスが特権コンテキストで実行されている場合は、コマンドをadminとして実行する必要がある場合があります。

37
Ryan Ries

この情報を取得するには、WMIC.EXEを使用してWMIサブシステムを使用できます。 PIDを600と仮定します。

wmic.exe path Win32_Process where handle='600' get name, commandline  /format:list

プロセスの名前やその他の特性を検索することもできます。このコマンドを使用して、すべての属性をリストします。

wmic.exe path Win32_Process get  /format:list
21
RobW

他の答えは確かに良いオプションです。コマンドラインの性質上、自動化されたシステムで役立つでしょう(そして、私はタグから、それがあなたが望んでいたことを理解しています)。もちろん、一部の人々はこの種の情報をGUIで探索したいと思うかもしれないので、ここにそれらの線に沿った代替があります。

Process Explorerは、Microsoftが管理するSysinternalsツールです。プロセスのプロパティダイアログとプロセスを起動した親にプロセスのコマンドラインを表示できますが、そのプロセスの名前は使用できなくなる可能性があります。これがプロセスプロパティダイアログです。

process properties dialog

プロセスがいつ、どのような状況で起動されたかの詳細な監査証跡が必要な場合は、Process Monitorと呼ばれる別のSysinternalsツールを使用できます。ここでは、「プロセス開始」イベントをフィルタリングし、プロセスが起動された環境について学習し、その時間に他にどのようなイベントが発生していたかを確認できます。それは非常に強力なプログラムです。イベントプロパティダイアログは次のとおりです。

event properties dialog

16
Corrodias

Ryan Riesの便利なPowerShellの回答-Filterパラメータを介したより短い代替手段で使用(= /// =) Get-CimInstancedeprecated-since-v3 Get-WmiObject cmdlet の代わりに。

# Target a process by its PID (process ID) and report its command line, 
# using the PowerShell session's own PID as an example ($PID).
(Get-CimInstance Win32_Process -Filter "ProcessId=$PID").CommandLine

# Alternatively, target process(es) by name (may return multiple processes), 
# using Notepad.exe as an example.
# Select-Object is used to report both the PID and the command line.
Get-CimInstance Win32_Process -Filter "Name='Notepad.exe'" |
  Select-Object ProcessId, CommandLine

-Filterパラメーターを使用すると、基本的に、-Queryを介して完全なクエリステートメントを渡す代わりに、 [〜#〜] wql [〜#〜] ステートメントのWHERE句を渡すことができます。

1
mklement