Tierney - stock.adobe.com

Tutorial: So überwachen Sie CPU-Nutzung mit PowerShell

Viele Admins kennen sich schon mit der PowerShell aus. Deshalb bietet sie sich als Tool für die Leistungsüberwachung von Desktops als Werkzeug für die Problemanalyse an.

Suboptimale Ressourcennutzung auf den Geräten von Endnutzern kann zu Problemen mit der Performance führen. Veraltete Hardware, Hintergrundprozesse oder Speicherlecks können die Ursache übermäßiger Ressourcennutzung sein.

Da die Leistung von Endgeräten wichtig für die Zufriedenheit der Mitarbeiter und deren Performance ist, sollten Admins einen einfachen Weg finden, sie zu überwachen und steuern. In einem größeren Unternehmen ist es zunächst etwas mühsam, die CPU-Auslastung auf Endbenutzerhardware mit PowerShell durchzuführen. In diesem Fall sollten Administratoren auf zusätzliche Tools für das Endgerätemanagement zurückgreifen, die diesen Prozess automatisieren.

Windows 10 bringt einige native Überwachungswerkzeuge mit, darunter den Task-Manager, den Ressourcenmonitor und die Leistungsüberwachung. Ein wertvolles Tool, das in diesem Kontext gerne übersehen wird, ist jedoch die PowerShell.

Admins, die PowerShell bereits routiniert für andere Aufgaben einsetzen, sollten mit der Überwachung der Prozessorauslastung schnell und einfach zurechtkommen.

Schritt für Schritt: Prozessorüberwachung mit PowerShell

So ziemlich jeder Windows-Anwender hat irgendwann in seinem Leben schon einmal den Task-Manager geöffnet und sich darin die aktuelle Ressourcennutzung angesehen. Das PowerShell-Äquivalent dieser Ansicht findet sich in der Windows Management Instrumentation (WMI)-Klasse win32_processor.

Beginnen Sie mit dem PowerShell-Befehl zur Ausgabe der durchschnittlichen Auslastung in Prozent über alle Desktops Ihres Unternehmens hinweg. Da PowerShell seit Version 7 das Cmdlet Get_WMIObject nicht mehr unterstützt, können Sie stattdessen auf Get-CimInstance ausweichen, um Informationen aus der WMI-Klasse abzufragen. In diesem Beispiel sieht das Skript folgendermaßen aus:

C:\Users\dan> Get-CimInstance win32_processor | Measure-Object -Property LoadPercentage -Average

Das Ergebnis dieser Abfrage wird in mehreren Feldern angezeigt:

Count: 1

Average: 10

Sum:

Maximum:

Minimum:

Property: LoadPercentage

Der durchschnittliche Wert (Average) in unserem Beispiel ist 10. Das bedeutet, dass die durchschnittliche Prozessorauslastung der angegebenen Maschinen bei zehn Prozent liegt. Zehn Prozent ist ein geringer Wert, die Nutzung der betroffenen Prozessoren ist also völlig unkritisch.

Im nächsten Schritt erweitern Sie die Abfrage auf die laufende Summe der prozentualen Prozessorauslastungen. Für diesen Zweck reicht eine simple While-Schleife in PowerShell aus. Um die Schleife bis zu einem festgelegten Ende am Laufen zu halten, verwenden Sie die PowerShell-Variable $True.

Geben Sie dann Get-CimInstance über die Pipeline an Measure-Object weiter, um den Mittelwert bestimmen zu lassen. Danach navigieren Sie zu Select-Object, um die Average-Eigenschaft anzeigen zu lassen. Das Start-Sleep-Utility fügt in den Loop eine Pause in der angegebenen Länge ein.

Abbildung 1: Die Durchschnittliche CPU-Auslastung wird nach jeweils einer Sekunde neu ermittelt und in die Konsole ausgegeben.
Abbildung 1: Die Durchschnittliche CPU-Auslastung wird nach jeweils einer Sekunde neu ermittelt und in die Konsole ausgegeben.

Der Loop lässt sich mit Strg+C unterbrechen.

Die prozessorhungrigsten Prozesse finden

Ein häufiger Anwendungsfall für die Prozessorüberwachung mit PowerShell ist die Suche nach dem CPU-hungrigsten Prozess. Dafür verwenden Sie Get-Counter, das auf nativen Windows Performance Countern und Messressourcen basiert.

Nutzen Sie den Counter '\Process(*)\% Processor Time' in PowerShell mit Get.Counter. Der wertvollste Wert aus dieser Abfrage ist CookedValue, dabei handelt es sich um den lesbaren Teil der Daten. In diesem Fall geben die Daten einen Prozentwert an.

Abbildung 2: Unter CookedValue gibt Powershell die gesamte Prozentzahl der jeweiligen Nutzung aus.
Abbildung 2: Unter CookedValue gibt Powershell die gesamte Prozentzahl der jeweiligen Nutzung aus.

Dabei müssen Sie beachten, dass dieses Skript sämtliche logischen Prozessoren der Maschine berücksichtigt. Deswegen kann der Wert von CookedValues auch über 100 Prozent hinausgehen.

Fortsetzung des Inhalts unten

Erfahren Sie mehr über Data-Center-Betrieb

ComputerWeekly.de

Close