レジストリのデータを取得

PowerShellを使ってレジストリのデータを取得してみたいと思います。「プログラムのアンインストールまたは変更」のデータを取得します。

この中のプログラム名の部分を取得してみます。まず、この部分がレジストリのどのデータかを探さなくてはいけません。インターネットで検索するとMicrosoftのサポートオンラインのページがありました。この中で[プログラムの追加と削除]のレジストリーキーについて書かれています。
http://support.microsoft.com/kb/314481/ja
しかし、これはWindows XPのことについて書かれたものです。そのためWindows 7に関して調査してみます。まず、レジストリエディタを起動します。「プログラムとファイルの検索」で「regedit」を入力します。すると、「regedit.exe」というファイルが見つかるので実行します。以下のパスまで辿っていきます。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

すると、ちゃんとありました。

この中でDisPlayNameという名前のデータが実際に表示されるプログラム名であるとわかります。少し問題なのが対象データがUninstallフォルダの直下にはない事です。そのため、Uninstallフォルダのサブフォルダを取得し、そこの中のデータを取得しなければなりません。しかし、PowerShellではGet-ChildItemでレジストリを操作できるのでそれを使います。以下がプログラムです。

set-PSDebug -strict
# ----------------------------------------------------
# プログラムのアンインストールまたは変更のプログラム名を取得する
# ----------------------------------------------------

$reg_parent_dir = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"

foreach ($reg_child_dir in get-ChildItem -path registry::$reg_parent_dir){
    get-ItemProperty -path registry::$reg_child_dir | select-Object -property displayname
}

実行すると以下のようになります。

「更新プログラムのアンインストール」の項目も表示されちゃってますね。

(実行結果に空欄があるのも気になります・・・)