Praca z instalacjami oprogramowania

Aplikacje zainstalowane za pomocą Instalatora Windows można znaleźć za pośrednictwem zapytań usługi WMI, ale nie wszystkie aplikacje używają Instalatora Windows. Konkretne techniki znajdowania aplikacji zainstalowanych z innymi narzędziami zależą od oprogramowania instalatora.

Na przykład aplikacje instalowane przez skopiowanie plików do folderu na komputerze zwykle nie mogą być zarządzane przy użyciu technik omówionych tutaj. Te aplikacje można zarządzać jako plikami i folderami przy użyciu technik omówionych w temacie Praca z plikami i folderami.

W przypadku oprogramowania zainstalowanego przy użyciu pakietu instalatora można znaleźć Instalatora Windows przy użyciu klas Win32Reg_AddRemovePrograms lub Win32_Product . Jednak oba te problemy mają. Win32Reg_AddRemovePrograms jest dostępny tylko w przypadku korzystania z programu System Center Configuration Manager (SCCM). A klasa Win32_Product może być wolna i ma skutki uboczne.

Uwaga

Klasa Win32_Product nie jest zoptymalizowana pod kątem zapytań. Zapytania korzystające z filtrów wieloznacznych powodują, że usługa WMI używa dostawcy MSI do wyliczania wszystkich zainstalowanych produktów, a następnie sekwencyjnie analizuje pełną listę w celu obsługi filtru. Powoduje to również zainicjowanie sprawdzania spójności zainstalowanych pakietów, weryfikowania i naprawiania instalacji. Walidacja jest powolnym procesem i może spowodować błędy w dziennikach zdarzeń. Aby uzyskać więcej informacji, zapoznaj się z artykułem kb 974524.

Ten artykuł zawiera alternatywną metodę znajdowania zainstalowanego oprogramowania.

Wykonywanie zapytań dotyczących klucza rejestru Odinstaluj w celu znalezienia zainstalowanego oprogramowania

Ponieważ większość standardowych aplikacji rejestruje program odinstalowywania w systemie Windows, możemy pracować z tymi lokalnie, wyszukując je w rejestrze systemu Windows. Nie ma gwarantowanego sposobu znajdowania każdej aplikacji w systemie. Można jednak znaleźć wszystkie programy z listami wyświetlanymi w obszarze Dodaj lub Usuń programy w następującym kluczu rejestru:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall.

Liczbę zainstalowanych aplikacji można znaleźć, zliczając liczbę kluczy rejestru:

$UninstallPath = 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall'
(Get-ChildItem -Path $UninstallPath).Count
459

Możemy dalej przeszukiwać tę listę aplikacji przy użyciu różnych technik. Aby wyświetlić wartości rejestru w kluczach rejestru w obszarze Uninstall, użyj GetValue() metody kluczy rejestru. Wartość metody to nazwa wpisu rejestru. Aby na przykład znaleźć nazwy wyświetlane aplikacji w kluczu Uninstall , użyj następującego polecenia:

Get-ChildItem -Path $UninstallPath |
    ForEach-Object -Process { $_.GetValue('DisplayName') } |
    Sort-Object

Uwaga

Nie ma gwarancji, że wartości DisplayName są unikatowe.

Poniższy przykład generuje dane wyjściowe podobne do klasy Win32Reg_AddRemovePrograms :

Get-ChildItem $UninstallPath |
    ForEach-Object {
        $ProdID = ($_.Name -split '\\')[-1]
        Get-ItemProperty -Path "$UninstallPath\$ProdID" -ea SilentlyContinue |
        Select-Object -Property DisplayName, InstallDate, @{n='ProdID'; e={$ProdID}}, Publisher, DisplayVersion
} | Select-Object -First 3

Ze względu na zwięzłość w tym przykładzie użyto Select-Object metody , aby ograniczyć liczbę elementów zwracanych do trzech.

DisplayName    : 7-Zip 22.01 (x64)
InstallDate    :
ProdID         : 7-Zip
Publisher      : Igor Pavlov
DisplayVersion : 22.01

DisplayName    : AutoHotkey 1.1.33.10
InstallDate    :
ProdID         : AutoHotkey
Publisher      : Lexikos
DisplayVersion : 1.1.33.10

DisplayName    : Beyond Compare 4.4.6
InstallDate    : 20230310
ProdID         : BeyondCompare4_is1
Publisher      : Scooter Software
DisplayVersion : 4.4.6.27483