コマンドライン経由で、プログラムの追加と削除リスト (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
}