Prozesse überwachen in PowerShell – ohne externe Tools, mit Stil und Klarheit.

In der Unix-Welt ist htop ein bewährtes Werkzeug zur Prozessüberwachung in Echtzeit. Es bietet Übersicht, Sortierfunktionen und eine ansprechende, interaktive Darstellung. Doch was tun, wenn man auf Windows, macOS oder Linux arbeitet – und PowerShell das bevorzugte Werkzeug ist?

In diesem Artikel zeige ich dir, wie du mit reinem PowerShell ein leichtgewichtiges htop-Äquivalent baust: übersichtlich, schnell und ohne Abhängigkeiten – plattformübergreifend!


Ziel: Ein schlankes PowerShell-htop

Unsere Anforderungen:

  • ❌ Kein Modulimport, keine externen Tools
  • ✅ Übersichtliche Echtzeitausgabe von CPU- und Speichernutzung
  • ✅ Parameter für die Anzahl der angezeigten Prozesse
  • ✅ Einheitliches, kompaktes Layout – auch bei langen Prozessnamen

Das Skript

Hier ist das vollständige Skript:

param(
    [int]$Top = 20
)

function Format-ProcessList {
    param([int]$TopCount)

    $processes = Get-Process |
        Sort-Object CPU -Descending |
        Select-Object -First $TopCount Name, Id, CPU, PM |
        ForEach-Object {
            $name = $_.Name
            if ($name.Length -gt 25) {
                $name = $name.Substring(0, 22) + "..."
            }

            [PSCustomObject]@{
                Name   = $name
                Id     = $_.Id
                CPU    = "{0,6:N1}" -f ($_.CPU)
                MemMB  = "{0,8:N1}" -f ($_.PM / 1MB)
            }
        }

    $header = "{0,-25} {1,6} {2,6} {3,8}" -f "Prozessname", "PID", "CPU", "Mem(MB)"
    $line   = "-" * $header.Length

    Clear-Host
    Write-Host $header -ForegroundColor Cyan
    Write-Host $line

    foreach ($proc in $processes) {
        "{0,-25} {1,6} {2,6} {3,8}" -f $proc.Name, $proc.Id, $proc.CPU, $proc.MemMB
    }
}

while ($true) {
    Format-ProcessList -TopCount $Top
    Start-Sleep -Seconds 1
}

Ausführen

Speichere das Skript als htop.ps1 und führe es mit PowerShell aus:

pwsh ./htop.ps1

Optional kannst du mit dem Parameter -Top die Anzahl der angezeigten Prozesse festlegen:

pwsh ./htop.ps1 -Top 10

🧾 Beispielausgabe

Prozessname               PID    CPU  Mem(MB)
---------------------------------------------
chrome                   11092  15.2    512.3
pwsh                     22900   8.9     75.2
Teams                    20763   7.3    411.8
Outlook                  15044   6.1    303.5
...

Lange Prozessnamen werden automatisch gekürzt, um das Layout nicht zu stören – so bleibt die Übersicht stets gewahrt.


📈 Was zeigt dieses Skript?

  • CPU: Die bisher verbrauchte Prozessorzeit (nicht Prozentanteil!)
  • Mem(MB): Der Speicherverbrauch in Megabyte (Private Memory)

Diese Metriken geben dir einen soliden Überblick, welche Prozesse dein System gerade fordern.


Erweiterungsideen

Möchtest du das Skript ausbauen? Hier ein paar Anregungen:

  • Umschalten zwischen Sortierung nach CPU und Speicher
  • Einfärbung besonders speicher- oder CPU-hungriger Prozesse
  • ASCII-Bar-Graphen für CPU-Auslastung
  • Ausgabe als HTML oder CSV zur Weiterverarbeitung

Fazit

Mit nur wenigen Zeilen PowerShell-Code kannst du dir ein elegantes, plattformübergreifendes Monitoring-Tool bauen – ganz ohne externe Tools oder Module. Besonders auf Systemen, wo du keinen Zugriff auf klassische Unix-Tools hast, ist dieses Skript ein praktischer Helfer.