コマンドライン経由で Wi​​nXP/Win7 の追加/削除から表示されるすべてのアプリケーションを一覧表示するにはどうすればよいでしょうか?

コマンドライン経由で Wi​​nXP/Win7 の追加/削除から表示されるすべてのアプリケーションを一覧表示するにはどうすればよいでしょうか?

コマンドライン経由で、プログラムの追加と削除リスト (WinXP/Win7) に表示される、インストールされているすべてのアプリケーションを一覧表示しようとしています。Win7 の場合、cp から「プログラムと機能」と呼ばれることは理解しています。

wmic を試しましたが、MSI を使用してインストールされたプログラムのみがリストされます。レジストリ (HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall および wow6432node) を照会してみました。

まだ Spotify をトラップできません (良い例)。追加/削除セクションには表示されますが、これらの場所には表示されません。

何かご意見は?

-ドム

答え1

wmicこれはコマンドから実行できるようです
。これを試してください:

wmic product  

コンピュータにインストールされているすべてのもののリストを表示します
。ソース:
http://www.sepago.de/d/helge/2010/01/14/how-to-list-all-installed-applications-from-the-command-line http://technet.microsoft.com/en-us/library/bb742610.aspx#ECAA

このページにはWindows Vistaと7用と書かれていますが、私はWindows XPでもwmicをテストしました。
Windows コマンドラインからインストールされているアプリケーションのリストを取得する

また、このページでは、レジストリエントリを確認する方法が正確ではない可能性があることを説明しています。
http://community.spiceworks.com/how_to/show/2238-how-add-remove-programs-works

wmic を使用して他に何ができるかについての詳細情報は次のとおりです。
http://betanews.com/2011/01/14/wmic-the-best-command-line-tool-you-ve-never-used/
あなたの問題に特化したこのウェブサイトから:

このプログラムは、システムの他の多くの側面に関する詳細情報も提供できます。次のようなコマンドがあります。

wmic 製品リスト概要

wmic サービス リストの概要

wmic プロセス リストの概要

wmic スタートアップ リストの概要

たとえば、インストールされているソフトウェア、サービス、実行中のプロセス、Windows スタートアップ プログラムなどが一覧表示されます。

答え2

cmd のアプローチはどれも完全ではないので、満足できないと思います。Powershell で問題ない場合は、これですべて解決しました。

If (!([Diagnostics.Process]::GetCurrentProcess(). Path -match '\\syswow64\\')) {
    $unistallPath = "\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
    $unistallWow6432Path = "\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"
    
    @( 
        if (Test-Path "HKLM:$unistallWow6432Path" ) { Get-ChildItem "HKLM:$unistallWow6432Path"} 
        if (Test-Path "HKLM:$unistallPath" ) { Get-ChildItem "HKLM:$unistallPath" } 
        if (Test-Path "HKCU:$unistallWow6432Path") { Get-ChildItem "HKCU:$unistallWow6432Path"} 
        if (Test-Path "HKCU:$unistallPath" ) { Get-ChildItem "HKCU:$unistallPath" } 
    ) | 
    ForEach-Object { Get-ItemProperty $_.PSPath } | 
    Where-Object { 
        $_.DisplayName -and !$_.SystemComponent -and !$_.ReleaseType -and !$_.ParentKeyName -and ($_.UninstallString -or $_.NoRemove) 
    } | 
    Sort-Object DisplayName | 
    Select-Object DisplayName
} else {
    "You are running 32-bit Powershell on 64-bit system. Please run 64-bit Powershell instead." | 
    Write-Host -ForegroundColor Red
}

関連情報