Software Inventarisierung mit PowerShell
Oft ist es interessant zu wissen, welche Software auf dem Computer installiert ist. Hierzu zählt nicht nur die Software, welche für alle Benutzer installiert ist, sondern auch die Software des aktuellen Benutzers. Zum Inventarisieren der Software gibt es bereits einige Tools oder große Software-Verteilungen. Doch es gibt auch einen schnellen Weg mit PowerShell.
Installierte Software ermitteln in der Windows Registry
Welche Software auf dem Computer installiert ist, kann in der Windows Registry ermittelt werden. Hierzu gibt es zwei Bereiche zu unterscheiden:
- HKLM (Local Machine) = Alle Benutzer
- HKCU (Current User) = Aktueller Benutzer
In der Regel wird eine Software für alle Benutzer installiert und wird somit im Bereich HKLM registriert. Für eine komplette Inventarisierung der installierten Programme muss aber auch der Registry Bereich HKCU betrachtet werden. Ein super Beispiel ist die Microsoft Teams App, diese wird in das Benutzerprofil installiert.
Wenn man dann noch die Pfade für 32-bit und 64-bit hinzufügt, ergibt sich eine Liste an Registry-Keys die ausgelesen werden müssen, um eine komplette Liste der installierten Programme zu erhalten:
- HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\
- HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
- HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\
- HKCU:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
Wenn man diese Keys auslesen lässt, hat man eine komplette Inventarisierung der Software auf dem Windows Computer. Nun kommt PowerShell ins Spiel: Mit einem PowerShell Script lässt sich sekundenschnell die Inhalte auslesen und schön ausgeben.
Software-Inventarisierung mit PowerShell
Wie oben beschrieben, müssen alle vier Registry-Pfade beachtet werden, um eine komplette Inventarisierung der Software durchführen zu können. Mit PowerShell ist es ein Kinderspiel diese Keys auszuwerten.
Da natürlich für die Software-Liste nicht alle Daten relevant sind, werden in unserem Script nur folgende Eigenschaften ausgegeben:
- DisplayName
- Version
- Uninstall-String
- Installationsdatum
Als Ausgabe erhält man in der Regel eine lange Liste an Software-Produkten, die auf dem Windows Computer installiert sind. So kann man auch die Informationen mit PowerShell schnell und einfach weiter verarbeiten. Möchte man lediglich eine schnelle und schöne Übersicht, so kann man das Script mit | Out-GridView
erweitern.
# Alle Sub-Keys auslesen und Fehler ignorieren Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*', 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*', 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*', 'HKCU:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' -ErrorAction Ignore | # Nur Einträge mit einem "DisplayName" verarbeiten Where-Object DisplayName | # Nur "interessante" Eigenschaften ausgeben Select-Object -Property DisplayName, DisplayVersion, UninstallString, InstallDate | # Nach Namen sortieren Sort-Object -Property DisplayName