PowerShell Basics – Der Einstieg in die objektorientierte Shell



PowerShell ist mehr als nur eine Shell – sie ist ein mächtiges, objektorientiertes Werkzeug für Windows-Administratoren und Entwickler. Anders als klassische Kommandozeilen wie CMD oder Bash arbeitet PowerShell nicht mit Text, sondern mit .NET-Objekten. Das eröffnet ganz andere Möglichkeiten bei der Verarbeitung und Übergabe von Daten.


Warum PowerShell?

Viele greifen zu PowerShell, weil CMD schlicht zu limitiert ist – besonders bei der Automatisierung. Was PowerShell besonders macht:

  • Zugriff auf .NET und WMI
  • Pipeline mit Objekten statt Strings
  • Komplexe Strukturen direkt verarbeitbar
  • Saubere Syntax, auch für Skripte

Grundstruktur

Ein PowerShell-Befehl (Cmdlet) folgt meist dieser Struktur:

Verb-Noun -Parameter Wert

Beispiel:

Get-Process -Name notepad

Objekte statt Text

Der zentrale Unterschied zu anderen Shells: PowerShell gibt keine Textzeilen aus, sondern echte Objekte. Du kannst direkt auf Eigenschaften zugreifen – ohne Umweg über awk, cut oder Regex.

$proc = Get-Process -Name notepad
$proc.Id
$proc.Path

Du arbeitest also direkt mit Instanzen der Klasse System.Diagnostics.Process. Die Ausgabe lässt sich dadurch gezielt verarbeiten oder filtern.


Pipeline mit Objekten

Die PowerShell-Pipeline (|) übergibt keine Textzeilen, sondern Objekte.

Get-Service | Where-Object { $_.Status -eq "Running" } | Sort-Object DisplayName

Hier werden alle laufenden Dienste ermittelt und alphabetisch sortiert – rein objektbasiert. Keine Stringvergleiche nötig.


Formatierung vs. Weiterverarbeitung

Ein häufiger Fehler: Format-Table oder Format-List erzeugt formatierte Textausgaben, keine Objekte mehr. Das ist fürs Display gedacht, nicht für Weiterverarbeitung.

Falsch:

Get-Process | Format-Table Name, Id | Where-Object { $_.Id -gt 1000 }

Richtig:

Get-Process | Where-Object { $_.Id -gt 1000 } | Select-Object Name, Id

Weitere Beispiele

Dienste starten und stoppen

Stop-Service -Name Spooler
Start-Service -Name Spooler

Dateien filtern

Get-ChildItem -Path C:\Logs -Recurse | Where-Object { $_.Length -gt 1MB }

Prozesse nach CPU sortieren

Get-Process | Sort-Object CPU -Descending | Select-Object -First 10

Fazit

PowerShell hebt sich von klassischen Shells ab, weil es nicht nur Befehle ausführt, sondern strukturiert mit Objekten arbeitet. Wer einmal versteht, wie mächtig diese Objektpipeline ist, möchte sie in der täglichen Arbeit nicht mehr missen – sei es bei der Systemadministration, im CI/CD-Kontext oder bei einfachen Skript-Automationen.