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