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.
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.
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.