Manchmal müssen Sie überprüfen, ob Sie oder ein Benutzer eine bestimmte Software installiert haben oder auch welche Version der Software vorhanden ist. Möglicherweise möchten Sie auch mal sehen, ob die Software auf dem neuesten Stand ist oder ob Ihre über GPO bereitgestellte Software für einen bestimmten Benutzer installiert wurde. Dieser Beitrag beschreibt mehrere Methoden, wie Sie dies mit PowerShell tun.
Inhaltsverzeichnis:
- Installierte Software-Liste lokal überprüfen
- Installierte Software-Liste rechnerfern überprüfen
- Über GPO bereitgestellte Software überprüfen
Installierte Software auf Ihrem Rechner überprüfen
Um zu überprüfen, welche Software auf Ihrem Rechner installiert ist, können Sie jederzeit auf Programme und Features in Ihrer Systemsteuerung gehen oder auch in allen Festplattenpartitionen nach einer bestimmten App suchen. Sie können sogar versuchen, eine App im Startmenü zu finden, um sie zu starten und manuell nach ihrer Versionsnummer zu suchen. Das Problem bei diesen Methoden besteht jedoch darin, dass sie eher weit von „schnell und automatisch“ entfernt sind. Wenn Sie die installierten Software-Versionen mit PowerShell überprüfen, sammeln Sie die benötigten Daten viel schneller.
Software-Liste mit Get-WmiObject anzeigen
Die erste Methode ist sehr simpel. Einfach die folgende Abfrage einfügen:
Get-WmiObject -Class Win32_Product
Sie können die Daten auch einfach filtern, um bestimmte Apps eines einzelnen Anbieters und deren Versionen zu finden, zum Beispiel:
Get-WmiObject -Class Win32_Product | where vendor -eq CodeTwo | select Name, Version
Diese Methode ist sehr einfach. Sie hat aber einen großen Nachteil: Es dauert ziemlich lange, bis die Ergebnisse zurückgegeben werden.
Installierte Software-Version in Registry abfragen
Eine weitere Methode zum Abrufen einer Liste der installierten Software ist das Abfragen der Registry. Das folgende Skript gibt die Liste der Apps und deren Versionen zurück:
$InstalledSoftware = Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall" foreach($obj in $InstalledSoftware){write-host $obj.GetValue('DisplayName') -NoNewline; write-host " - " -NoNewline; write-host $obj.GetValue('DisplayVersion')}
Werfen Sie nun einen kurzen Blick auf das oben fett gedruckte HKLM-Element. Es weist darauf hin, dass das Skript alle Software zurückgegeben hat, die auf dem LM – dem lokalen Computer – installiert sind. Apps können jedoch für individuelle Benutzer installiert sein. Um eine Software-Liste eines gerade angemeldeten Benutzers zurückzugeben, ändern Sie HKLM in HKCU (CU steht für „current user“ also „aktueller Benutzer“):
$InstalledSoftware = Get-ChildItem "HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall"
foreach($obj in $InstalledSoftware){write-host $obj.GetValue('DisplayName') -NoNewline; write-host " - " -NoNewline; write-host $obj.GetValue('DisplayVersion')}
Liste der zuletzt installierter Software über Event Log abrufen
Wenn Sie nur die in der letzten Zeit installierte Software anzeigen möchten, können Sie diese Information mit dem folgenden Cmdlet über das Event Log abrufen:
Get-WinEvent -ProviderName msiinstaller | where id -eq 1033 | select timecreated,message | FL *
Das ist die zuverlässigste Methode, um die kürzlich hinzugefügten Elemente zu finden. Event Logs sind nämlich standardmäßig so eingestellt, dass sie die ältesten Datensätze überschreiben (zirkuläre Protokollierung).
Installierte Software-Liste rechnerfern überprüfen
Jede der hier dargestellten Methoden können Sie auch nutzen, um eine Software-Version zu überprüfen, die auf anderen Computern in demselben Netzwerk installiert ist. Wenn Sie eine Liste aller Computernamen in Ihrem Netzwerk erstellen, können Sie die folgenden Methoden innerhalb einer Foreach-Schleife anwenden. So werden Ergebnisse von mehr als einem einzelnen Remote-PC zurückzugeben.
$pcname steht in jedem Skript für den Namen des Remote-Computers, von dem Sie eine Liste der installierten Software und deren Versionen erhalten möchten.
Installierte Software-Liste rechnerfern mit Befehl Get-WmiObject überprüfen
Das folgende Cmdlet ist die einfachste Methoden, kann jedoch zeitaufwändig sein:
Get-WmiObject Win32_Product -ComputerName $pcname | select Name,Version
wobei $pcname der Name des Computers ist, den Sie abfragen möchten.
Installierte Software rechnerfern in Registry abfragen
Die Registry rechnerfern abzufragen ist eher eine komplizierte Aufgabe und erfordert, dass der Remoteregistrierungsdienst ausgeführt wird. Eine Beispielabfrage lautet wie folgt:
$list=@() $InstalledSoftwareKey="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall" $InstalledSoftware=[microsoft.win32.registrykey]::OpenRemoteBaseKey('LocalMachine',$pcname) $RegistryKey=$InstalledSoftware.OpenSubKey($InstalledSoftwareKey) $SubKeys=$RegistryKey.GetSubKeyNames() Foreach ($key in $SubKeys){ $thisKey=$InstalledSoftwareKey+"\\"+$key $thisSubKey=$InstalledSoftware.OpenSubKey($thisKey) $obj = New-Object PSObject $obj | Add-Member -MemberType NoteProperty -Name "ComputerName" -Value $pcname $obj | Add-Member -MemberType NoteProperty -Name "DisplayName" -Value $($thisSubKey.GetValue("DisplayName")) $obj | Add-Member -MemberType NoteProperty -Name "DisplayVersion" -Value $($thisSubKey.GetValue("DisplayVersion")) $list += $obj } $list | where { $_.DisplayName } | select ComputerName, DisplayName, DisplayVersion | FT
Installierte Software rechnerfern mit Event Log überprüfen
Um das Event Log eines Benutzers rechnerfern zu überprüfen, müssen Sie dem zuvor verwendeten Cmdlet ein einzelnes Attribut (-ComputerName) hinzufügen:
Get-WinEvent -ComputerName $pcname -ProviderName msiinstaller | where id -eq 1033 | select timecreated,message | FL *
Über GPO bereitgestellte Software überprüfen
Wenn Sie eine bestimmte Softwareversion über GPO bereitgestellt haben, können Sie leicht überprüfen, ob dieses GPO erfolgreich auf einen Benutzer angewendet wurde oder nicht. Sie benötigen lediglich das GPResult-Tool und die Namen des Zielcomputers und des Benutzers:
gpresult /s "PCNAME" /USER "Username" /h "Zielort des HTML-Berichts"
Suchen Sie dann nach Ihrem GPO-Namen und prüfen Sie, ob er unter Applied GPOs oder Denied GPOs aufgeführt ist. Das folgende Beispiel-GPO befindet sich in unter Applied GPOs.
Verantwortlicher für Ihre personenbezogenen Daten ist CodeTwo sp. z o.o. sp. k.
Weitere Informationen finden Sie in unserer Datenschutzerklärung.