今やWindowsにもChocolateyやScoopなどのフリーのものから、去年に公式から発表されたwingetまでパッケージマネージャが存在します。
パッケージマネージャを使えば(たぶん)パパっとインストールされているアプリケーションがリストを出したりインストールしたりできるのでしょうが、シェアウェアだと難しい。例えば、Chocolateyだとpackagesにあるアプリケーションのみがインストールの対象のよう、wingetだとうまくいけそうな気はするけどまだプレビュー版だった。
まぁ、せめてリストくらいは欲しいなと思った。
ごく素朴にすると下記のコマンドで出る。
Get-WmiObject Win32_Product
が、公式のドキュメントの説明では
Windows インストーラーを使用するように設計されているアプリケーションは、WMI の Win32_Product クラスからアクセスできますが、今日使用されているすべてのアプリケーションが Windows インストーラーを使用しているわけではありません。 代替のセットアップ ルーチンが使われるアプリケーションは、通常 Windows インストーラーによって管理されません。 このようなアプリケーションを処理するための具体的な方法は、インストーラー ソフトウェアおよびアプリケーション開発者による決定によって異なります。 たとえば、コンピューター上のフォルダーにファイルをコピーすることでインストールするアプリケーションは、通常、ここで紹介している手法を使用して管理することはできません。 このようなファイルとフォルダーとしてのアプリケーションは、「ファイルとフォルダーの操作」で説明されている手法を使って管理できます
ソフトウェア インストールの操作 – PowerShell | Microsoft Docs
とのこと。該当ページをスクロールしていくと、
アンインストール可能なすべてのアプリケーションを一覧表示する
ほとんどの標準的なアプリケーションでは Windows にアンインストーラーが登録されるため、Windows レジストリでこれらを検索することで、ローカルで操作できます。 システム上のすべてのアプリケーションを検索する確実な方法はありません。 ただし、次のレジストリ キーで [プログラムの追加と削除] に表示されるリストを備えているプログラムをすべて検索することは可能です。
ソフトウェア インストールの操作 – PowerShell | Microsoft Docs
と書かれている。今回の目的は「プログラムの追加と削除」のリストアップなのでこの方法を行う。
公式ドキュメントに記載されているコマンドを順に実行していく。カウントは適宜。
New-PSDrive -Name Uninstall -PSProvider Registry -Root HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
(Get-ChildItem -Path Uninstall:).Count
$UninstallableApplications = Get-ChildItem -Path Uninstall:
$UninstallableApplications | ForEach-Object -Process { $_.GetValue('DisplayName') }
一番はじめのコマンドではネットワークドライブにUninstallという名前でマウントしている。cdコマンドで移動もできる。
ネットワークドライブを外すにはRemove-PSDriveコマンドを使用する。
Remove-PSDrive -Name Uninstal
今のパソコンが今年の12月で5年目なのでそろそろ新しいパソコンを新調したいなと、今使っているパソコンにインストールされているアプリケーションをリストアップしたいということでちょっと調べてみた。
コメントを残す