Como listar todos os aplicativos exibidos em adicionar/remover WinXP/Win7 via linha de comando?

Como listar todos os aplicativos exibidos em adicionar/remover WinXP/Win7 via linha de comando?

Estou tentando listar todos os aplicativos instalados exibidos na lista de adicionar/remover programas (WinXP/Win7) via linha de comando. Entendo que para Win7 é chamado de "Programas e Recursos" do cp.

Eu tentei o wmic, mas ele lista apenas os programas instalados usando MSIs. Tentei consultar o registro (HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall e também wow6432node).

Ainda não consigo prender o Spotify (bom exemplo); ele aparece na seção adicionar/remover, mas não nesses locais.

Alguma ideia?

-Dom

Responder1

Parece que isso pode ser feito a partir do wmiccomando
Tente isto:

wmic product  

Mostra uma lista de tudo instalado no computador
Fontes:
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

Esta página diz que é para Windows Vista e 7, mas também testei o wmic no Windows XP
Obtenha a lista de aplicativos instalados na linha de comando do Windows

Além disso, esta página explica que o método de verificação da entrada do registro pode não ser preciso
http://community.spiceworks.com/how_to/show/2238-how-add-remove-programs-works

Aqui estão mais algumas informações sobre o que mais pode ser feito usando o wmic:
http://betanews.com/2011/01/14/wmic-the-best-command-line-tool-you-ve-never-used/
Neste site, especificamente para o seu problema:

O programa também pode fornecer detalhes sobre muitos outros aspectos do seu sistema. Comandos como:

resumo da lista de produtos wmic

resumo da lista de serviços wmic

resumo da lista de processos wmic

resumo da lista de inicialização do wmic

listará seu software instalado, serviços, processos em execução e programas de inicialização do Windows, por exemplo.

Responder2

Não acho que você ficará satisfeito com nenhuma das abordagens do cmd, pois elas não serão completas. Se você concorda com o Powershell, isso me deu tudo:

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
}

informação relacionada