So überprüfen Sie schnell installierte Softwareversionen
Es gibt Situationen, in denen Sie überprüfen müssen, ob Sie oder Ihre Benutzer bestimmte Software installiert haben und in welcher Version. Möglicherweise möchten Sie überprüfen, ob die Software auf dem neuesten Stand ist oder ob die vom Gruppenrichtlinienobjekt bereitgestellte Software für einen bestimmten Benutzer installiert wurde. Ich zeige Ihnen verschiedene Methoden, mit denen Sie dies mit PowerShell überprüfen können.
Schnellnavigation:
- Liste der installierten Software lokal überprüfen
- Get-WmiObject
- Registrierungsabfrage
- Ereignisprotokoll
- Überprüfen Sie die Liste der installierten Software aus der Ferne
- Get-WmiObject
- Registrierungsabfrage
- Ereignisprotokoll
- Überprüfen Sie, ob GPO-bereitgestellte Software erfolgreich angewendet wurde
Überprüfen Sie, was auf Ihrem Computer installiert ist
Um zu überprüfen, welche Software installiert ist, können Sie jederzeit Programme und Funktionen in Ihrer Systemsteuerung verwenden oder alle Festplattenpartitionen nach einer bestimmten App durchsuchen. 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 ist jedoch, dass sie so weit von „schnell und automatisch“ entfernt sind, wie sie sein können. Wenn Sie die installierten Softwareversionen mithilfe von PowerShell überprüfen, können Sie die benötigten Daten viel schneller erfassen.
Get installed software list with Get-WmiObject
Die erste Methode ist so einfach wie das Einfügen einer einfachen Abfrage:
Get-WmiObject -Class Win32_Product
Sie können die Daten auch einfach filtern, um beispielsweise bestimmte Anwendungen eines einzelnen Anbieters zusammen mit deren Versionen zu finden:
Get-WmiObject -Class Win32_Product | where vendor -eq CodeTwo | select Name, Version
Obwohl diese Methode sehr einfach ist, hat sie einen großen Nachteil – es dauert eine ganze Weile, bis die Ergebnisse vorliegen.
Abfrage der Registrierung nachinstallierte Software
Eine andere Methode zum Abrufen einer Liste der installierten Software ist das Abfragen der Registrierung. Das folgende kurze Skript gibt die Liste der Anwendungen zusammen mit ihren 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')}
Schauen Sie sich nun das oben fett gedruckte HKLM-Element an. Dies bedeutet, dass die vom Skript zurückgegebene Liste der Software die gesamte auf der LM – localmachine installierte Software enthält. Es können jedoch auch Anwendungen pro Benutzer installiert werden. Um eine Liste der Anwendungen des aktuell angemeldeten Benutzers zurückzugeben, ändern Sie HKLM in HKCU (CU steht für „current user“):
$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')}
Abrufen der Liste der kürzlich installierten Software aus dem Ereignisprotokoll
Wenn Sie nur die kürzlich installierte Software überprüfen möchten, können Sie das folgende Cmdlett verwenden, um das Ereignisprotokoll zu durchsuchen.
Get-WinEvent -ProviderName msiinstaller | where id -eq 1033 | select timecreated,message | FL *
Diese Methode zum Ermitteln installierter Software ist für die kürzlich hinzugefügten Elemente am zuverlässigsten, da Ereignisprotokolle standardmäßig so eingestellt sind, dass die ältesten Datensätze überschrieben werden (kreisförmige Protokollierung).
Weitere Informationen zur Verwendung von PowerShell zum Überprüfen von Windows-Ereignisprotokollen und Filterergebnissen
Abrufen einer Liste der installierten Software aus der Ferne
Jede der oben genannten Methoden kann auch zum Überprüfen von Software verwendet werden, die auf anderen Computern im selben Netzwerk installiert ist. Wenn Sie eine Liste aller Computernamen in Ihrem Netzwerk erstellen, können Sie die folgenden Methoden innerhalb einer Foreach-Schleife verwenden, um Ergebnisse von mehr als einem einzelnen Remote-PC zurückzugeben.
$pcname in jedem Skript steht für den Namen des Remote-Computers, auf dem Sie eine Liste der installierten Software und ihrer Versionen erhalten möchten.
Get installed softwarelist with remote Get-WmiObject command
Das folgende Cmdlet ist wiederum das einfachste im Haufen, kann aber einige Zeit dauern:
Get-WmiObject Win32_Product -ComputerName $pcname | select Name,Version
dabei ist $pcname der Name des Computers, den Sie abfragen möchten.
Installierte Software überprüfenmit Remote-Registrierungsabfrage
Remote-Registrierungsabfragen sind etwas komplizierter und erfordern die Ausführung des Remote-Registrierungsdienstes. Eine Beispielabfrage lautet wie folgt:
$list=@()$InstalledSoftwareKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"$InstalledSoftware=::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
Überprüfen Sie die kürzlich installierte Softwareliste aus dem Ereignisprotokoll aus der Ferne
Um das Ereignisprotokoll eines Benutzers aus der Ferne zu überprüfen, muss dem zuvor verwendeten Cmdlet ein einzelnes Attribut (-ComputerName) hinzugefügt werden:
Get-WinEvent -ComputerName $pcname -ProviderName msiinstaller | where id -eq 1033 | select timecreated,message | FL *
Überprüfen Sie, ob eine vom Gruppenrichtlinienobjekt bereitgestellte Software erfolgreich angewendet wurde
Wenn Sie eine bestimmte Softwareversion über das Gruppenrichtlinienobjekt angewendet haben, können Sie leicht überprüfen, ob dieses Gruppenrichtlinienobjekt 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 "Target location of theHTML report"
Suchen Sie dann nach Ihrem GPOname und prüfen Sie, ob er unter Angewandte GPOs oder Verweigerte GPOs aufgeführt ist.Das Beispiel-Gruppenrichtlinienobjekt unten befindet sich in der Gruppe Angewandte Gruppenrichtlinienobjekte.