Softwareinventarisierung mit der PowerShell

In loser Abfolge wird der DOTNET Doktor in seinem Blog jetzt PowerShell-Skripte vorstellen. Folge 1 behandelt die Softwareinventarisierung.

In Pocket speichern vorlesen Druckansicht 1 Kommentar lesen
Lesezeit: 2 Min.
Von
  • Dr. Holger Schwichtenberg

In loser Abfolge werde ich in meinem Blog jetzt PowerShell-Skripte vorstellen. Folge 1 behandelt eine selbstgebaute Softwareinventarisierung.

Zur Motivation, sich mit der Windows PowerShell zu beschäftigen, soll folgendes Beispiel aus der Praxis dienen. Es soll ein Inventarisierungsskript für Software erstellt werden, das die installierten MSI-Pakete mit Hilfe der Windows Management Instrumentation (WMI) von mehreren Computern ausliest und die Ergebnisse in einer CSV-Datei (softwareinventar.csv) zusammenfasst. Beim Auslesen der MSI-Pakete sollen Filter (z.B. nach Hersteller) möglich sein. Die Namen (oder IP-Adressen) der abzufragenden Computer sollen in einer Textdatei (computernamen.txt) stehen.

Die Lösung besteht aus einer WQL-Abfrage, die über Get-WMIObject in einer Schleife für jeden Computer ausgeführt wird. Vorher wird geprüft, ob der Computer erreichbar ist mit einem Ping.

########################################
# Das PowerShell-Script inventarisiert die installierte Software
# eines Herstellers auf n Computersystemen
# (C) Dr. Holger Schwichtenberg
########################################

$Eingabedateiname = "computernamen.txt"
$Ausgabedateiname = "Softwareinventar.csv"
$Query = "SELECT * FROM Win32_Product where not Vendor like '%Microsoft%'"

# Import der Computernamen
$Computernamen = Get-Content "computernamen.txt"
$Computernamen | foreach {
if (Ping($_))
{
Write-Host "Inventarisiere Software für Computer $_ ..."
# Auslesen der installierten MSI-Pakete auf allen Computern
$Software += foreach-object { get-wmiobject -query $Query -computername $_ }
}
else
{
Write-Error "Computer nicht erreichbar!"
}
}

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


# Ping ausführen
function Ping
{
$status = Get-WmiObject Win32_PingStatus -filter "Address='$args[0]'" | select
StatusCode
return $status.Statuscode -eq 0
}

Übrigens: die iX bietet zusammen mit meiner Firma www.IT-Visions.de jetzt PowerShell-Schulungen an! ()