Zahl der Prozessoren, Cores und logischen CPUs erfassen mit PowerShell

    Intel-ProzessorWer über keine Inventa­risierungs­lösung verfügt, um die CPU-Aus­stattung der Server zu ermit­teln, kann diese Aufgabe alter­nativ über Power­Shell und WMI erledigen. Die remote erfassten Daten lassen sich für eine weiter­gehende Auswertung in einer CSV-Datei speichern.

    Gerade in virtualisierten Umgebungen ist es wichtig, einen Überblick über die Rechen­kapazitä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 Lizenz­verwaltung 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äts­planung 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 Prozes­soren 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 Inventa­risierung der vorhandenen CPUs dürfte es jedoch erwünscht sein, eine Liste mit Server-Namen abzuarbeiten und die Ergeb­nisse 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.

    Zahl der CPUs und Cores mit Get-CIMInstance abfragen.

    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.

    Keine Kommentare