次の方法で共有


ソフトウェア インストールの操作

Windows インストーラーでインストールされるアプリケーションは WMI のクエリを使って見つけることができますが、Windows インストーラーを使わないアプリケーションもあります。 他のツールでインストールされるアプリケーションを見つける具体的な方法は、インストーラー ソフトウェアによって異なります。

たとえば、コンピューター上のフォルダーにファイルをコピーすることでインストールするアプリケーションは、通常、ここで紹介している手法を使用して管理することはできません。 このようなファイルとフォルダーとしてのアプリケーションは、「ファイルとフォルダーの操作」で説明されている手法を使って管理できます。

インストーラー パッケージを使ってインストールされるソフトウェアの場合、Windows インストーラーは Win32Reg_AddRemovePrograms または Win32_Product クラスを使って見つけることができます。 ただし、これらのどちらにも問題があります。 Win32Reg_AddRemovePrograms は、System Center Configuration Manager (SCCM) を使っている場合にのみ利用できます。 また、Win32_Product クラスは遅い場合があり、副作用があります。

注意事項

Win32_Product クラスはクエリ用に最適化されていません。 クエリでワイルドカード フィルターが使われると、インストールされているすべての製品を列挙するため WMI によって MSI のプロバイダーが使われ、その後フィルターを処理するために完全な一覧が順次解析されます。 これによってインストールされているパッケージの整合性チェックも開始され、インストールの検証および修復が行われます。 この検証は時間のかかるプロセスで、イベント ログにエラーが発生する可能性があります。 詳細については、サポート技術情報の記事 974524 をご覧ください。

この記事では、インストールされているソフトウェアを見つけるための別の方法について説明します。

Uninstall レジストリ キーのクエリを実行して、インストールされているソフトウェアを見つける

ほとんどの標準的なアプリケーションでは Windows にアンインストーラーが登録されるため、Windows レジストリでこれらを検索することで、ローカルで操作できます。 システム上のすべてのアプリケーションを検索する確実な方法はありません。 ただし、次のレジストリ キーで [プログラムの追加と削除] に表示されるリストを備えているプログラムをすべて検索することはできます。

[https://login.microsoftonline.com/consumers/](HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall)

レジストリ キーの数を数えることによって、インストールされているアプリケーションの数がわかります。

$UninstallPath = 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall'
(Get-ChildItem -Path $UninstallPath).Count
459

さまざまな方法を使って、このアプリケーションの一覧をさらに検索できます。 Uninstall の下にあるレジストリ キーのレジストリ値を表示するには、レジストリ キーの GetValue() メソッドを使います。 メソッドの値は、レジストリ エントリの名前です。 たとえば、Uninstall キーのアプリケーションの表示名を検索するには、次のコマンドを使います。

Get-ChildItem -Path $UninstallPath |
    ForEach-Object -Process { $_.GetValue('DisplayName') } |
    Sort-Object

注意

DisplayName 値が一意である保証はありません。

次の例では、Win32Reg_AddRemovePrograms クラスのような出力が生成されます。

Get-ChildItem $UninstallPath |
    ForEach-Object {
        $ProdID = ($_.Name -split '\\')[-1]
        Get-ItemProperty -Path "$UninstallPath\$ProdID" -ea SilentlyContinue |
        Select-Object -Property DisplayName, InstallDate, @{n='ProdID'; e={$ProdID}}, Publisher, DisplayVersion
} | Select-Object -First 3

簡潔にするために、この例では Select-Object を使って、返される項目の数を 3 に制限しています。

DisplayName    : 7-Zip 22.01 (x64)
InstallDate    :
ProdID         : 7-Zip
Publisher      : Igor Pavlov
DisplayVersion : 22.01

DisplayName    : AutoHotkey 1.1.33.10
InstallDate    :
ProdID         : AutoHotkey
Publisher      : Lexikos
DisplayVersion : 1.1.33.10

DisplayName    : Beyond Compare 4.4.6
InstallDate    : 20230310
ProdID         : BeyondCompare4_is1
Publisher      : Scooter Software
DisplayVersion : 4.4.6.27483