
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.