kazeno memo

メモとか

PowerShellでインストール済みソフトの一覧を取得、CSV出力

PCを移行する際、インストール済みソフトウェアをメモしようと思ったのですが、やっぱり一つずつコピーするのは大変なので、PowerShellを使って一覧を取得してみる。

環境はWindows7 64bit

mtgpowershell.blogspot.jp

こちらのブログを参考に、レジストリから一覧を取得する。

$path = "\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
$wow = "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
$patharray = ("HKLM:" + $path),("HKCU:" + $path)
if(Test-Path $wow){$patharray += $wow}

上記では、レジストリのパスを設定している。

Get-ChildItem -Path $patharray |
    %{Get-ItemProperty $_.PsPath} |
    ?{$_.systemcomponent -ne 1 -and $_.parentkeyname -eq $null} |
    sort displayname |
    select DisplayName,Publisher,DisplayVersion

上記は、レジストリから一覧を取得している。
三行目では一覧からシステムコンポーネントを除外している。
五行目のselectでは、「プログラムと機能」の「名前」「発行元」「バージョン」がそれぞれ表示される。

Export-Csv -path .\List.csv -Encoding Default -NoTypeInformation

最後にExport-Csvを使い、リストをList.csvとして出力。
エンコードSJISにしたい場合はDefault、他にもUTF8等指定できます。


ということで、以下のコマンドをPowerShellに貼り付けるとCSVファイルが出力される。

$path = "\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
$wow = "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
$patharray = ("HKLM:" + $path),("HKCU:" + $path)
if(Test-Path $wow){$patharray += $wow}

Get-ChildItem -Path $patharray |
    %{Get-ItemProperty $_.PsPath} |
    ?{$_.systemcomponent -ne 1 -and $_.parentkeyname -eq $null} |
    sort displayname |
    select DisplayName,Publisher,DisplayVersion |
    Export-Csv -path .\List.csv -Encoding Default -NoTypeInformation

ちなみに、いくつか重複している項目があったので注意。

参考
PowerShell: ◆インストールされているソフトウエアの一覧を取得(64ビットOS対応版)
PowerShell: ◆インストールされているソフトウエアの一覧を取得
PowerShellのExport-CsvコマンドレットでCSVファイルを出力する | MSeeeeN
PowerShell/インストール済アプリケーション一覧を取得する - Windowsと暮らす