2010年6月12日土曜日

◆インストールされているソフトウエアの一覧を取得

以下のレジストリーに情報がある。
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

20100612172230
サブキーをすべて取得して、それぞれの値(名前)がDisplayNameとPublisherをのものをSelectすれば「アプリケーションの追加と削除」に表示されるものと同じものが取得できるっぽい。
Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall  |
  %{Get-ItemProperty $_.PsPath}  |
  sort displayname  |
  select DisplayName,Publisher


<結果>
20100612173029
<アプリケーションの追加と削除>
20100612173133
比べてみると、いくつか余計なものが含まれている。
アプリケーションの追加と削除では「更新プログラム」は別途表示されているのと、システムコンポーネントが除外されているようだ。
レジストリーを眺めてそれっぽいプロパティ(systemcomponentとparentkeyname)でフィルターしてみる。

Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall |
    %{Get-ItemProperty $_.PsPath} |
    ?{$_.systemcomponent -ne 1 -and $_.parentkeyname -eq $null} |
    sort displayname |
    select DisplayName,Publisher

だいたいよさそうだが、一部(Google Chrome)のアプリケーションはHKLMではなくHKCUに情報がある。
そこで両方のキーから取ってくるように修正。

$path = "\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
$path1 = "HKLM:" + $path
$path2 = "HKCU:" + $path
Get-ChildItem -Path ($path1,$path2) |
    %{Get-ItemProperty $_.PsPath} |
    ?{$_.systemcomponent -ne 1 -and $_.parentkeyname -eq $null} |
    sort displayname |
    select DisplayName,Publisher

これで、一応「アプリケーションの追加と削除」に表示されるものと一致した。

あくまでも私の環境で一致しただけなのですべての環境でOKかは分からないが当たらずとも遠からずだろう。

--

追記
http://mtgpowershell.blogspot.jp/2011/02/64os.html

0 件のコメント:

コメントを投稿