PowerShell: Betriebssysteme inventarisieren und zählen
Sicher hat schon ein Jeder von euch mindestens einmal die Anforderung gehabt, die Anzahl der im Einsatz befindlichen Betriebssysteme in der eigenen IT-Landschaft zu zählen. Sofern die entsprechenden Systeme ein Computer-Account im Active Directory anlegen und das Attribut „operatingSystem“ pflegen, ist dies relativ einfach möglich.
Folgendes PowerShell-Skript zeigt auf, wie diese Anforderung schnell und simpel erfüllt werden kann. Wichtig, das Active Directory PowerShell Modul muss zuvor geladen werden, damit die Funktion Get-ADComputer interpretiert werden kann. Alternativ kann dieses Skript auch direkt auf einem Windows Domain Controller ausgeführt werden.
#Funktion um die Werte des Arrays auf Duplikate zu prüfen und aufzulisten
Function Get-Duplicate {
param($OSCountArray, [switch]$count)
begin {
$OSHash = @{}
}
process {
$OSCountArray | %{ $OSHash[$_] = $OSHash[$_] + 1 }
if($count) {
$OSHash.GetEnumerator() | ?{$_.value -gt 1} | %{
New-Object PSObject -Property @{
Betriebssystem = $_.key
Anzahl = $_.value
}
}
}
else {
$OSHash.GetEnumerator() | ?{$_.value -gt 1} | %{$_.key}
}
}
}
#Array erstellen, zusammenfassen und formatieren
$ADOSCollection = @(
#Auslesen der nicht deaktivierten Computer-Accounts aus der Verzeichnisstruktur
$ADOperatinSystems = (Get-ADComputer -Properties * -Filter 'Enabled -eq $true' | Select OperatingSystem)
ForEach ($OSEntry in $ADOperatinSystems) {
$OS = $OSEntry.OperatingSystem
#Nur Werte ungleich NULL übernehmen
if ($OS -ne $null) {
echo $OS
}
}
)
#Anwendung der Funktion Get-Duplicate
Get-Duplicate $ADOSCollection -count
Ich empfehle das Ausführen über die PowerShell ISE, da das Ergebnis ersichtlich bleibt. Die Ausgabe sieht dann in etwa wie folgt aus:
Viel Freude damit und ein schönes Wochenende wünscht IT-Feed!