Я пытаюсь вывести список всех установленных приложений, которые отображаются в списке установки/удаления программ (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
}