naleor
Goto Top

PowerShell Scanne und Filter Software im Netzwerk

Hallo zusammen,

irgendwie komme ich bei der Fehlermeldung nicht weiter.
Ich versuche hier in einem Script, die installierte Software im Netzwerk zu scannen und in eine Datei auszugeben.
Für diesen Fall würde ich gerne nur sehen, wo Office Professional installiert. Am liebsten wäre mir natürlich, alle verschiedene Office Versionen zu finden - aber soweit bin ich noch nicht.

In meinem Skript werden die Computernamen / IP-Adressen aus einer .txt genommen und in eine CSV exportiert. Das funktioniert soweit ganz ok.

$Eingabedateiname = "computernamen.txt"   
$Ausgabedateiname = "Software.csv"  
   

# Import der Computernamen
$Computernamen = Get-Content "computernamen.txt"   
$Computernamen | foreach { 

 Write-Host "Scanne Software für Computer $_ ..."  
 # Auslesen der Software
 $Software += foreach-object { get-wmiobject Win32_Product -Filter "Caption like '%Office%'" -computername $_ | Select-Object -Property PSComputerName, Name  }   

}

# Export in CSV
$Software | export-csv "Software.csv" -notypeinformation  

Hier bekomme ich als Ausgabe natürlich auch ziemlich viel Müll, der mich nicht so interessiert.
Sobald ich anstatt '%Office%' '%Office Professional%' nehme, bekomme ich eine Fehlermeldung.
Fehler beim Aufrufen der Methode, da [System.Management.Automation.PSObject] keine Methode mit dem Namen "op_Addition"  
enthält.
Und in der CSV-Datei wird dann auch nur der erste Computer aus der .txt angezeigt.

Wenn ich das jetzt ohne Skript macht und einfach in die PS eingebe, funktioniert es.
Also so:
 get-wmiobject Win32_Product -Filter "Caption like '%Office Prof%'" -computername 192.168.178.2, 192.168.178.3 | Select-Object -Property PSComputerName, Name  

Da hängt es schon seit Ewigkeiten.

Content-ID: 552666

Url: https://administrator.de/contentid/552666

Ausgedruckt am: 25.11.2024 um 16:11 Uhr

143127
Lösung 143127 29.02.2020 aktualisiert um 10:05:48 Uhr
Goto Top
Die Klasse win32_Product ist böse und sollte man aus diversen Gründen auch nicht dafür nutzen!
Der Grund ist das die Klasse beim Aufruf für sämtliche Produkte ein Installer-Refresh initiiert der erstens sehr lange dauern kann und man damit sogar manche Produkte zurücksetzen oder in manchen Fällen sogar in einen inkonsistenten Zustand versetzen kann.
Außerdem erfasst Win32_Product auch nicht sämtliche installierten Produkte.
Aus diesen Gründen nutzt man heute bevorzugt die Registry wenn man wirklich alle installierten Programme zuverlässig erfassen möchte, Beispiele wie man das macht finden sich hier im Forum, wie z.B. In diesem Beitrag
Mit Powershell in der Reg. auslesen um den UninstallString zu bekommen
Naleor
Naleor 02.03.2020 um 10:48:54 Uhr
Goto Top
Danke für den Hinweis.
Werde es diese Woche nicht mehr schaffen, aber dann in der nächsten Woche mal testen.
Wobei ich auch die Erfahrung gemacht habe, dass manche Programme zwar deinstalliert sind, aber immer noch ein Eintrag in der Registry hängt.
143127
143127 02.03.2020 aktualisiert um 10:53:13 Uhr
Goto Top
Zitat von @Naleor:
Wobei ich auch die Erfahrung gemacht habe, dass manche Programme zwar deinstalliert sind, aber immer noch ein Eintrag in der Registry hängt.
Das lässt sich aber leicht mit einer Prüfung (Test-Path) checken, besser so als das Win32_Product überhaupt nichts von den Installationen mitteilt.