Estoy intentando enumerar todas las aplicaciones instaladas que se muestran en la lista de agregar o quitar programas (WinXP/Win7) a través de la línea de comandos. Entiendo que para Win7 se llama "Programas y características" en el cp.
Probé wmic pero solo enumera los programas instalados usando MSI. Intenté consultar el registro (HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall y también wow6432node).
Todavía no puedo capturar Spotify (buen ejemplo); aparece en la sección agregar/eliminar pero no en estas ubicaciones.
¿Alguna idea?
-dom
Respuesta1
Parece que esto se puede hacer desde el wmic
comando
Prueba esto:
wmic product
Muestra una lista de todo lo instalado en el ordenador
Fuentes:
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 dice que es para Windows Vista y 7, pero también probé wmic en Windows XP.
Obtenga una lista de aplicaciones instaladas desde la línea de comandos de Windows
Además, esta página explica que el método para verificar la entrada del registro puede no ser exacto.
http://community.spiceworks.com/how_to/show/2238-how-add-remove-programs-works
Aquí hay más información sobre qué más se puede hacer usando wmic:
http://betanews.com/2011/01/14/wmic-the-best-command-line-tool-you-ve-never-used/
Desde este sitio web, específicamente para su problema:
El programa también puede proporcionar detalles sobre muchos otros aspectos de su sistema. Comandos como:
breve lista de productos wmic
breve lista de servicios wmic
breve lista de procesos wmic
breve lista de inicio de wmic
enumerará el software instalado, los servicios, los procesos en ejecución y los programas de inicio de Windows, por ejemplo.
Respuesta2
No creo que esté satisfecho con ninguno de los enfoques de cmd ya que no estarán completos. Si estás de acuerdo con Powershell, esto me dio todo:
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
}