Wie kann ich in PowerShell Systeminformationen wie CPU-Auslastung und RAM-Verbrauch abfragen?
- Einführung
- CPU-Auslastung abfragen
- RAM-Verbrauch ermitteln
- Alternative Methode: Verwendung von Performance-Countern für RAM
- Zusammenfassendes Beispielscript
- Fazit
Einführung
PowerShell bietet umfangreiche Möglichkeiten, um detaillierte Systeminformationen abzurufen. Besonders wenn Sie die aktuelle CPU-Auslastung sowie den RAM-Verbrauch ermitteln möchten, können Sie auf integrierte Cmdlets und .NET-Klassen zurückgreifen. Im Folgenden erkläre ich, wie Sie diese Werte abfragen und interpretieren können.
CPU-Auslastung abfragen
Für die CPU-Auslastung gibt es verschiedene Ansätze. Eine einfache Methode ist die Verwendung des Cmdlets Get-Counter, mit dem Sie Performance-Counter-Daten abfragen können. Der Zähler \Processor(_Total)\% Processor Time liefert die Gesamt-CPU-Auslastung in Prozent.
Ein typisches Beispiel zum Abruf der aktuellen CPU-Auslastung sieht so aus:
Get-Counter \Processor(_Total)\% Processor Time | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValueDieser Befehl gibt die aktuelle CPU-Auslastung als Zahl zurück. Da Performance-Counter in der Regel zeitlich gemittelte Werte liefern, kann es sinnvoll sein, mehrere Samples über einen Zeitraum einzuholen:
Get-Counter \Processor(_Total)\% Processor Time -SampleInterval 1 -MaxSamples 5 | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValueSo können Sie eine aussagekräftigere Durchschnittswerte-Berechnung durchführen.
RAM-Verbrauch ermitteln
Zur Ermittlung des RAM-Verbrauchs können Sie auf verschiedene Wege zurückgreifen. PowerShell bietet das Cmdlet Get-CimInstance (oder in älteren Versionen Get-WmiObject), welches Systeminformationen über die Klasse Win32_OperatingSystem bereitstellt.
Ein Beispiel, um den gesamten physischen Speicher sowie den aktuell verfügbaren freien Arbeitsspeicher zu ermitteln, lautet:
$os = Get-CimInstance Win32_OperatingSystem$totalRAM = ::Round($os.TotalVisibleMemorySize / 1024, 2)$freeRAM = ::Round($os.FreePhysicalMemory / 1024, 2)"Gesamter RAM: $totalRAM MB""Freier RAM: $freeRAM MB"Die Werte TotalVisibleMemorySize und FreePhysicalMemory werden in Kilobyte zurückgegeben, weshalb eine Umrechnung in Megabyte erfolgt.
Um den aktuell genutzten RAM zu ermitteln, können Sie einfach die Differenz bilden:
$usedRAM = $totalRAM - $freeRAM"Genutzter RAM: $usedRAM MB"Alternative Methode: Verwendung von Performance-Countern für RAM
Alternativ können Sie auch RAM-bezogene Performance-Counter auslesen, beispielsweise \Memory\Available MBytes um den verfügbaren Speicher in MB abzufragen:
Get-Counter \Memory\Available MBytes | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValueIn Kombination mit bekanntem Gesamtspeicher können Sie daraus ebenfalls den Verbrauch ableiten.
Zusammenfassendes Beispielscript
Hier ein kleines PowerShell-Skript, das sowohl die CPU-Auslastung als auch den RAM-Verbrauch zusammenfasst:
# CPU-Auslastung ermitteln$cpuUsage = Get-Counter \Processor(_Total)\% Processor Time | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValue
$cpuUsageFormatted = ::Round($cpuUsage, 2)# RAM-Informationen abfragen$os = Get-CimInstance Win32_OperatingSystem$totalRAM = ::Round($os.TotalVisibleMemorySize / 1024, 2)$freeRAM = ::Round($os.FreePhysicalMemory / 1024, 2)$usedRAM = ::Round($totalRAM - $freeRAM, 2)# AusgabeWrite-Output "CPU-Auslastung: $cpuUsageFormatted %"Write-Output "Gesamter RAM: $totalRAM MB"Write-Output "Freier RAM: $freeRAM MB"Write-Output "Genutzter RAM: $usedRAM MB"$cpuUsage = Get-Counter \Processor(_Total)\% Processor Time | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValue
Fazit
Mit PowerShell lassen sich CPU- und RAM-Auslastung schnell und einfach abfragen. Die Kombination aus Get-Counter für dynamische Performance-Daten und Get-CimInstance für statische Systeminformationen bietet dabei eine solide Grundlage für Monitoring-Skripte oder Diagnosen. Durch das Formatieren und Rundungen können Sie die Ausgabe benutzerfreundlich gestalten.