Práce s nainstalovaným softwarem

Aplikace nainstalované pomocí Instalační služby systému Windows lze najít prostřednictvím dotazů rozhraní WMI, ale ne všechny aplikace používají Instalační službu systému Windows. Specifické techniky hledání aplikací nainstalovaných s jinými nástroji závisí na instalačním softwaru.

Například aplikace nainstalované zkopírováním souborů do složky v počítači se obvykle nedají spravovat pomocí technik probíraných zde. Tyto aplikace můžete spravovat jako soubory a složky pomocí technik probíraných v části Práce se soubory a složkami.

Pro software nainstalovaný pomocí instalačního balíčku lze instalační službu systému Windows najít pomocí Win32Reg_AddRemovePrograms nebo třídy Win32_Product . Obě tyto problémy však mají. Win32Reg_AddRemovePrograms je k dispozici pouze v případě, že používáte nástroj System Center Configuration Manager (SCCM). A Win32_Product třída může být pomalá a má vedlejší účinky.

Upozornění

Třída Win32_Product není optimalizovaná. Dotazy, které používají filtry se zástupnými čísly, způsobují, že služba WMI použije zprostředkovatele MSI k vytvoření výčtu všech nainstalovaných produktů, a následné parsování úplného seznamu za účelem zpracování filtru. Tím se také zahájí kontrola konzistence nainstalovaných balíčků, ověření a oprava instalace. Ověření je pomalý proces a může vést k chybám v protokolech událostí. Další informace najdete v článku znalostní báze 974524.

Tento článek obsahuje alternativní metodu pro vyhledání nainstalovaného softwaru.

Dotazování klíče registru odinstalace a vyhledání nainstalovaného softwaru

Vzhledem k tomu, že většina standardních aplikací zaregistruje odinstalátor ve Windows, můžeme s nimi pracovat místně tak, že je vyhledáme v registru Windows. Neexistuje žádný zaručený způsob, jak najít každou aplikaci v systému. Všechny programy s výpisy zobrazenými v příkazu Přidat nebo odebrat programy je však možné najít v následujícím klíči registru:

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

Počet nainstalovaných aplikací můžeme najít tak, že spočítáme počet klíčů registru:

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

Tento seznam aplikací můžeme dále prohledávat pomocí různých technik. Chcete-li zobrazit hodnoty hodnot registru v klíčích registru v části Uninstall, použijte GetValue() metodu klíčů registru. Hodnota metody je název položky registru. Pokud například chcete vyhledat zobrazované názvy aplikací v Uninstall klíči, použijte následující příkaz:

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

Poznámka:

Neexistuje žádná záruka, že hodnoty DisplayName jsou jedinečné.

Následující příklad vytvoří výstup podobný Win32Reg_AddRemovePrograms třídě:

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

V zájmu stručnosti tento příklad používá Select-Object k omezení počtu položek vrácených na tři.

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