Существует ли более быстрый способ найти номер продукта для установленного программного обеспечения, кроме win32_product - PullRequest
1 голос
/ 18 апреля 2019

Я работаю над сценарием для автоматизации восстановления программного обеспечения с помощью msiexec.У меня проблема в том, что когда я звоню:

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

Время, необходимое для разбора каждого номера продукта, составляет почти 5-10 минут. Есть ли более быстрый способ сделать это?

1 Ответ

0 голосов
/ 20 апреля 2019

Как упомянул 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 
...
...