如何从命令中获取名称列表?

如何从命令中获取名称列表?

这个标题可能有点令人困惑,因为我不知道有更好的方式来表达它。

无论如何,我有这个代码Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize

它显示了我的电脑上安装的所有程序。

我熟悉 .,但我对如何获取列表中程序的名称有点困惑。有什么帮助吗?

答案1

在命令中仅包含名称Select-Object

Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName | Format-Table -AutoSize

答案2

有两个注册表项包含已安装的程序。

获取已安装应用程序的注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

以及 64 位操作系统上 32 位应用程序的注册表项。HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall

您可以创建一个 ForEach 循环来获取每个应用程序的点属性“DisplayName”,然后在对唯一名称进行排序之前将其添加到数组中 $array = $row = $Location = $Reg = $null

    $Location =  'Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\*',
                 'Registry::HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'
    
    ForEach ($Reg in $Location) {
    $row = (Get-ItemProperty -Path $Reg).DisplayName
    $array = $array + $row
    }
    $array | Sort-Object -Unique

可能存在已安装程序的其他注册表位置,并且仅供除所有用户或当前用户之外的特定用户使用。

答案3

您所能获取的只是注册表中存在的值。您可以使用以下命令列出可能的值

Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | gm

通常情况下,您不会找到可执行文件的名称,而只会找到 DisplayName。您可以查看 DisplayIcon 来查看可执行文件,但这不是标准做法。

答案4

參閱获取与添加/删除程序列表匹配的已安装应用程序列表


Powershell脚本:

OS_Architecture = $env:PROCESSOR_ARCHITECTURE
if($OS_Architecture -eq 'x86') 
{
    #write-host '32-bit'
    $key = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*"
}
else
{
    #write-host '64-bit'
    $key = "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
}

Get-ItemProperty $Key |
        Select-Object DisplayName |
            Format-Table –AutoSize

或者简单地使用命令行即​​可使用WMIC

wmic product get name

相关内容