PowerShellを使用すると、プログラムの追加と削除とまったく同じアプリケーションリストを取得できます。

PowerShellを使用すると、プログラムの追加と削除とまったく同じアプリケーションリストを取得できます。

システムにインストールされているアプリケーションを見つける方法はいろいろありますが、私の知る限り、コントロール パネルの [プログラムの追加と削除] 項目とまったく同じリストを返す方法はありません。私が試した方法のいくつかは次のとおりです。

  • Win32_Product および Win32Reg_AddRemovePrograms 経由の WMI
  • レジストリ、x32 と x64 の両方のブランチ

例えば、ARには217のエントリがあり、

gwmi  Win32_Product

261 個のアイテムを返します。

gp HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | ? {![string]::IsNullOrWhiteSpace($_.DisplayName) } | select DisplayName

119 個のアイテムを返します。

 (gwmi Win32Reg_AddRemovePrograms) + (gwmi Win32Reg_AddRemovePrograms64) | sort DisplayName -Unique 

107 個のアイテムを返します。

InstallLocation、、などを含むより複雑なフィルターでこれを特定しようとしましたが、InstallSource成功InstallDateしませんでした。

答え1

私にとってこれは残念なケースですコンウェイの法則Windows は、数十年の歴史と膨大な数の可動部品を持つ非常に複雑な OS です。つまり、「私のコンピュータには一体何がインストールされているのか」という質問のように、一見単純に思える事柄が、残念ながら非常に複雑になっているということです。「インストールされたソフトウェア」を複雑にしているのは、それが複数の異なるソースから来ていることです。64 ビット ソフトウェア、32 ビット ソフトウェア、特定のユーザーのみにインストールされるソフトウェア、すべてのユーザーにインストールされるソフトウェア、グループ ポリシーによってインストールまたは割り当てられたソフトウェアなどがあります。

幸いなことに、Sysinternal のプロセス モニターこれらすべてを明らかにすることができます。起動してレジストリ イベントを監視し、コントロール パネルの [プログラムの追加と削除] アプレットを自分でクリックして、Windows がバックグラウンドで何を実行しているかを確認します。

さまざまな情報源から引用します:

HKLM\Software\Installer\Products
HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\...
HKCU\Software\Microsoft\Windows\CurrentVersion\Installer\Managed\...
HKCU\Software\Microsoft\Installer\Products
HKLM\Software\Microsoft\Windows\CurrentVersion\Group Policy\AppMgmt
HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\...

もっと!

一方で、「プログラムの追加と削除」に表示されるものを正確に再構築するために必要なレジストリクエリのシーケンスを正確に確認することは不可能です。これは、現在ログオンしているユーザーなどに基づく「ビュー」です。一方、すぐにそれが多く作業の手間が省け、プログラムの追加と削除の正確なビューを再構築することは、そもそもそれほど重要ではなかったのかもしれません。:)

関連情報