Как вывести список всех приложений, отображаемых при добавлении/удалении WinXP/Win7 через командную строку?

Как вывести список всех приложений, отображаемых при добавлении/удалении WinXP/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, но я также тестировал wmic на Windows XP.
Получить список установленных приложений из командной строки 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
}

Связанный контент