Tags: Inventarisierung, Prozessoren, PowerShell
Wer über keine Inventarisierungslösung verfügt, um die CPU-Ausstattung der Server zu ermitteln, kann diese Aufgabe alternativ über PowerShell und WMI erledigen. Die remote erfassten Daten lassen sich für eine weitergehende Auswertung in einer CSV-Datei speichern.
Gerade in virtualisierten Umgebungen ist es wichtig, einen Überblick über die Rechenkapazitäten der Server zu haben. Auf diese Weise kann man eine übermäßige Zuteilung von vCPUs zu virtuellen Maschinen vermeiden.
Kapazitätsplanung und Lizenzverwaltung
Das Wissen um die Zahl der installieren Prozessoren und Rechenkerne spielt aber auch bei der Lizenzverwaltung eine wesentliche Rolle. Die meisten Hersteller rechnen ihre Server-Software mittlerweile pro Sockel oder pro Core ab. So stellte Microsoft die Lizenzierung von Windows Server 2016 auf ein Pro-Core-Modell um.
Bei der Kapazitätsplanung für virtualisierte Server benötigt man zum einen die Zahl der Prozessoren und Rechenkerne. Zum anderen sollte man aber auch herausfinden, wie viele logische Prozessoren verfügbar sind. Sie dienen bei Hyper-V und VMware als Basis zur Kalkulation der zulässigen Auslastung.
Daten aus zwei Klassen erforderlich
Diese Daten lassen sich über WMI abrufen. Das Vorhaben wird jedoch dadurch erschwert, dass dafür zwei verschiedene Klassen zuständig sind. Die Zahl der Prozessoren erhält man nur über Win32_Computersystem, während Win32_Processor über die Beschaffenheit der CPU Auskunft gibt.
Für einzelne Server kann man die Zahl und Eigenschaften der Prozessoren mit Hilfe des Kommandozeilen-Tools wmic ermitteln:
wmic COMPUTERSYSTEM get NumberOfProcessors
wmic CPU get NumberOfCores,NumberOfLogicalProcessors
Um diese Operation auf einem Remote-Server auszuführen, gibt man dessen Namen über den Parameter /node an.
Mehrere Server remote mit PowerShell abfragen
Für eine Inventarisierung der vorhandenen CPUs dürfte es jedoch erwünscht sein, eine Liste mit Server-Namen abzuarbeiten und die Ergebnisse an eine CSV-Datei anzuhängen, so dass man die Daten nachher in Excel auswerten kann.
Dafür empfiehlt sich der Einsatz von PowerShell, wo man im ersten Schritt die Spaltenüberschriften der neuen CSV-Datei schreibt:
"Name;CPUs;Cores;Logische CPUs"| Out-File .\cpu.csv
Anschließend ruft man für jeden Eintrag aus der Server-Liste Get-WMIObject zwei Mal auf, und zwar jeweils separat für jede Klasse. Die Variablen $c und $p speichern die Ergebnisse der Abfragen. Schließlich fügt der Operator -join die benötigten Werte zu einem String zusammen und Out-File hängt ihn an die zuvor angelegte CSV-Datei an.
Get-Content .\servers.txt | foreach{
$c = Get-WmiObject -Class Win32_Computersystem -ComputerName $_;
$p = Get-WmiObject -Class Win32_Processor -ComputerName $_;
-join($c.Name, ";", $c.NumberOfProcessors, ";", $p.NumberOfCores, ";",
$p.NumberOfLogicalProcessors) | Out-File -Append .\cpu.csv;
}
Dieses Beispiel geht davon aus, dass sich die Liste der Server-Namen in der Datei servers.txt befindet und diese einen Eintrag pro Zeile enthält. Außerdem verwendet es noch das ältere Get-WmiObject, das man aber einfach durch das neuere CIM-Cmdlet Get-CimInstance ersetzen kann. Dessen wichtigster Vorteil besteht darin, dass es über WinRM und nicht mehr über DCOM kommuniziert.
Neben den genannten Eigenschaften bietet speziell die Klasse Win32_Processor eine Reihe weiterer Merkmale der CPU. Dazu zählen etwa die Bezeichnung (Caption), der Hersteller (Manufacturer) oder die ID (ProcessorId). Eine vollständige Liste der verfügbaren Eigenschaften gibt
Get-CimInstance -Class Win32_Processor | gm
aus.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- Computer im Active Directory filtern und inventarisieren mit PowerShell
- Installationsvarianten (Nano, Core, Desktop) und Editionen von Windows Server erkennen
- baramundi Management Suite 2023 R2: Neues Modul für Fernwartung, Inventarisierung von Linux über SSH, Android Zero-Touch
- PowerShell für Logon-Scripts verwenden
- Dateien zwischen Windows und Linux kopieren mit SCP und PowerShell
Weitere Links