除了win32_product以外,是否有更快的方法来查找已安装软件的产品编号

时间:2019-04-18 17:41:24

标签: powershell winapi get-wmiobject

我正在研究一个脚本,以使用msiexec自动修复软件。我遇到的问题是当我打电话时:

get-wmiobject -class win32_product -filter "name of software" | foreach-object {$_.IdentifyingNumber}

解析每个产品编号所需的时间将近5-10分钟。有更快的方法吗?

1 个答案:

答案 0 :(得分:0)

正如Lee_Dailey所提到的,您可以从注册表中的卸载密钥中获取此信息。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

以下内容将为您提供安装的应用程序的名称和GUID,并在卸载密钥中带有一个条目。 -match "^{.+}$"仅返回以{开始并以}结尾的条目。如果您希望GUID输出不带括号{},则可以将其强制转换为[GUID],例如[GUID][String]$matches.Values

Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall |
%{
    if(($_.Name | Split-Path -Leaf) -match "^{.+}$")
    {
        [PSCustomObject]@{
            GUID = [String]$matches.Values
            Name = [String]($_ | Get-ItemProperty -ErrorAction SilentlyContinue).DisplayName
        }
    }
}

输出:

GUID                                   Name                                                          
----                                   ----                                                          
{0CA4BB37-FF4A-42C6-A39C-11CB0BB8D395} Microsoft .NET Core Host - 2.1.8 (x64)                        
{1657ABEE-7D56-416A-B7E0-A89CC5AAD0F7} Microsoft Azure Compute Emulator - v2.9.6 
...