명령줄을 통해 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용이라고 나와 있지만 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
}

관련 정보