プロセスが持つ情報は何?
タスクマネージャーもプロセスから情報を得て動作しているが、プロセスが持つ情報は多く、またGUIプログラムであるため、表示できる情報が限定されている。
これに対してWindows PowerShell(およびPowerShell 7.x)のGet-Processコマンドは、実行中のプロセスから多くの情報を得ることができる。
その情報は、.NET Framework/.NETのProcessクラス(System.Diagnostics.Process)に準じているが、Get-Processコマンドは、さらに「便利」なプロパティが追加されている。以下の表に追加されている主なプロパティを示す。これらは、プロセス情報をProcessクラスから得たあと、そのプロパティを使って、さらにAPIで得られる情報のうち、比較的利用頻度が高そうなものだ。
たとえば、プロセスの親プロセスは、PowerShell 7ではParentプロパティに入る。この中身もプロセス情報なので、同じように親をたどっていくことができる。CommandLineプロパティは、プロセスを起動したときのコマンドラインが記録されている。これを見ることでプロセスがどのように起動されたのかを知ることが可能だ(ただし、CommandLineプロパティを持たないプロセスも存在する)。そのほかには、プログラムのバージョンを表すProductVersionなどがある。
なお、ParentとCommandLineは、PowerShell 7では利用できるが、Windows PowerShellでは利用できない。ただし、Get-CIMInstanceコマンド経由でWMI/CIMから同等の情報を得ることは可能だ。
Get-CimInstance Win32_Process | select ProcessName,ParentProcessId, CommandLine
基本となるProcessクラスで得られる情報に関しては、マイクロソフトのLearnページに記載がある。
●Process クラス
https://learn.microsoft.com/ja-jp/dotnet/api/system.diagnostics.process?view=netframework-4.8.1
このクラスには、たとえば、ウィンドウのタイトル文字列を示すMainWindowTitleや、関連付けられているDLLなどのプログラムを列挙できるModules、各種メモリ指標(ページメモリサイズやワーキングセットなど)、プロセスから起動されたスレッド(Threads)などがある。
どんな情報があるのかを概観したければ、Get-Processの出力をOut-GridViewですべて表示可能。全体を眺めて見ることでどのような情報が出力されているのかを把握できる。
Get-Process | select * | Out-GridView
Microsoftストアからインストールしたアプリの場合、プロセスのPathプロパティ(実行ファイルのパス)を使って、パッケージ情報を得ることも可能だ。Microsoftストアからインストールしたアプリは、「C:\Program Files\WindowsApps」のサブフォルダにインストールされ、このときのサブフォルダ名がパッケージのPackageFullNameに相当する。このことを使うと、Get-AppxPackageコマンドからパッケージ情報を得ることができる。
たとえば、PowerShellの親プロセスのPathプロパティを見ることで、標準コンソール(conhost.exe)かWindowsターミナルなのか、ターミナルなら通常版かプレビュー版かを判断できる。
インストール先サブフォルダは「Microsoft.WindowsTerminalPreview_1.18.1462.0_x64__8wekyb3d8bbwe」のようになり、Windowsターミナルなら"WindowsTerminal"の文字があり、さらにプレビュー版なら、は、“Preview”の文字が入る。情報を取り出すには、
(Get-Process -id $pid).Parent.Path
とする。“$pid”は、PowerShellのプロセスIDが自動的に入る変数である。
PathプロパティからSplit-Pathコマンドで末尾の実行ファイル名を抜いたものと、Get-AppxPackageコマンドのInstallLocationプロパティが一致するものを探すことで、Get-AppxPackageコマンドで得られるパッケージ情報を見つけることができる。
Get-AppxPackage | ? InstallLocation -eq ((Get-Process -id $pid).Parent.path|Split-Path)
このようにして、プロセスから得られる情報を起点に、プログラムに関するさまざまな情報にアクセスできる。プログラムの情報は、プログラムの実行ファイルや関連ファイルにあると考えがちだが、実際には、プログラムを起動させてプロセスから取得するほうが簡単である。

この連載の記事
-
第508回
PC
Scalable Vector Graphics(SVG)そもそも何なのか? -
第507回
PC
Windows 11の「開発者モード」とは何か? -
第506回
PC
Windows 11は早くも来秋登場の26H2プレビューの準備が始まる -
第505回
PC
結構変化しているWindows 11のエクスプローラーの基本設定を見直す -
第504回
PC
新しいOutlookとOutlook Classic、そろそろ古いOutlookとExchangeの組み合わせは引退の頃合いか -
第503回
PC
機能が増えたこともあり、寄せ集めから統合化に進むWindowsの便利ツール「PowerToys」 -
第502回
PC
Windows 11でBluetoothのオーディオ新規格「Bluetooth LE Audio」を試す -
第501回
PC
Windows 11 Ver.25H2での変更点、新機能を整理する -
第500回
PC
Windows 11 Ver.25H2が完成した -
第499回
PC
Windowsでの致命的だが回復可能なエラーに備える手段を2つ紹介 -
第498回
PC
Windows Terminalの安定版V1.23が公開 設定UIが改良される - この連載の一覧へ












