例えば下図のような「プログラムと機能」の一覧を設計書などにまとめるために、テキストデータとして欲しいときがあります。
そんなときは「コマンドプロンプトか powershell を使ったら取れるだろう」と思ってしまうものですが、この「プログラムと機能」に関しては全ての情報を正確に引っ張ってくるのは無理です。
例えばよく利用されるのはこれから紹介する2つの powershell コマンドによって取得する方法ですが、それでも全然足りないし、重複があるしでそのまま一覧として利用するのは不可能です。結局のところマンパワーで解決するしかありません。
powershell による取得①
Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName,DisplayVersion,Publisher,InstallDate | Format-Table
上記のコマンドを実行することで、レジストリ「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall」の値を出力することができます。最も精度の高い方法のようですが、歯抜けだし重複だらけだしで使い物になりませんね。
例えば今回の例で言うと、11プログラム中以下の6プログラムが出力されていませんでした。
- Agentless Management Service
- NVMe Drive Eject NMI Fix
- RESTful Interface Tool
- Smart Storage Administrator
- Smart Storage Administrator CLI
- Smart Storage Administrator診断およびSSD Wear Gaugeユーティリティ
更によくよく見ると「ESMPRO/ServerAgentService」と「ServerAgentService」があったりと、重複が色々あります。
powershell による取得②
Get-WmiObject Win32_Product | Select-Object Name,Vendor,Version,Caption
上記のコマンドを実行することで、Win32_Product からインストールされたアプリケーションを出力することができます。
例えば今回の例で言うと、11プログラム中以下のプログラムが足りなかったり微妙に名前が違っていたり、「プログラムと機能」には表示されていないものも出力されました。
- ESMPRO/ServerAgentService ※名前が微妙に違う
- Matrox Graphics Software (remove only)
- Product Info Collection Utility (V3.1.7) ※名前が微妙に違う
- RAID Report Service
- エクスプレス通報サービス
- MergeModule2012 ※誰?
結果として、powershell でも綺麗に情報を引っ張ってはこれないので、目視でやるしかないです。