Powershell: Listowanie wszytkich zainstalowanych aplikacji

8-paź-2016

Właściwie jest dedykowane polecenie, które potrafi wylistować informacje o zainstalowanym oprogramowaniu:

Get-WmiObject -Class Win32_Product

Jest jednak kilka problemów z tym poleceniem:

  • Get-WMIObject Win32Product nie zwraca wszystkich zainstalowanych programów, a jedynie te, które były instalowane poprzez windows installer (MSI)
  • Uruchomienie polecenia powoduje pojawienie się w dzienniku aplikacyjnym całej listy wpisów podobnych do:
    Windows Installer reconfigured the product. Product Name: Google Update Helper. Product Version: 1.3.31.5. Product Language: 1033. Manufacturer: Google Inc.. Reconfiguration success or error status: 0.
    Wydaje się więc, że polecenie nie tylko listuje zainstalowane oprogramowanie ale dodatkowo może je jakoś zmodyfikować, co raczej nie jest naszą intencją podczas tworzenia listy oprogramowania

MSI

 

No więc jak wylistować zainstalowane oprogramowanie lepiej, tak aby każdy zainstalowany program został uwzględniony, a listowanie było szybkie i nie narażało komputera na zmienienie jego konfiguracji? Oto propozycja: przeczytajmy te informacje wprost z rejestru:

$regPath = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*’,
'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*’

Get-ItemProperty -Path $regPath |
Where-Object { $_.DisplayName -ne $null } |
Select DisplayName, DisplayVersion, InstallDate, UninstallString

Zaczynamy od zdefiniowania listy z kluczami rejestru, w których jest zapisywana informacja o instalowanych programach. W kolejnym kroku pobieramy podklucze wskazanych lokalizacji rejestru. Czasami trafią się tam pozycje bez nazwy i te chcemy opuścić, stąd wyrażenie Where. Z tej listy interesujące są zazwyczaj nazwa, wersja,  data instalacji i ewentualnie komenda pozwalająca odinstalować oprogramowanie. Gotowe!

software

 

Komentarze:

  1. Andrzej Jaracz napisał,

    Lista zwracanych aplikacji jest kompletna tylko gdy uruchomimy PowerShell 64bitowy. W przypadku PSx86 oba klucze rejestru zwracają tylko aplikacje 32bitowe. Lista jest wtedy z podwójnym pozycjami.

Autor: Rafał Kraik