PowerShell — objektbasierte Shell und Skriptsprache von Microsoft
Praxis-Guide zu PowerShell: Cmdlets, objektbasierte Pipeline, Prozesse, Dienste und Skripte plattformübergreifend mit pwsh 7 steuern.
PowerShell ist mehr als eine Shell: Ihre Pipeline reicht echte .NET-Objekte weiter statt bloßer Textzeilen – der zentrale Unterschied zu bash. Kommandos folgen dem klaren Verb-Noun-Schema wie Get-Process oder Get-ChildItem, und mit Get-Help sowie Get-Command erschließt du dir den Rest selbst. Seit PowerShell 7 (pwsh) läuft sie plattformübergreifend auf Windows, Linux und macOS. Dieser Guide zeigt dir die Cmdlets für Navigation, Prozesse, Pipeline und Skripte, die du täglich brauchst.
Grundlagen & Navigation
Get-Location — Zeigt das aktuelle Verzeichnis (Alias: pwd).
Get-LocationSet-Location <path> — Wechselt das Verzeichnis (Alias: cd).
Set-Location C:\UsersGet-ChildItem — Listet Dateien und Verzeichnisse auf (Alias: ls, dir).
Get-ChildItem -Recurse -Filter *.logGet-Content <file> — Zeigt den Inhalt einer Datei (Alias: cat, type).
Get-Content C:\logs\app.log -Tail 20Get-Command <name> — Findet Kommandos nach Name oder Muster.
Get-Command *-ServiceGet-Help <cmdlet> — Zeigt die Hilfe zu einem Cmdlet.
Get-Help Get-Process -ExamplesGet-Alias <alias> — Zeigt, worauf ein Alias verweist.
Get-Alias lsProzesse & Dienste
Get-Process — Listet alle laufenden Prozesse auf.
Get-Process | Sort-Object CPU -Descending | Select -First 10Stop-Process -Name <name> — Beendet einen Prozess anhand des Namens.
Stop-Process -Name notepadStop-Process -Id <pid> — Beendet einen Prozess anhand der PID.
Stop-Process -Id 1234 -ForceGet-Service — Listet alle Dienste auf.
Get-Service | Where-Object Status -eq RunningStart-Service <name> — Startet einen Dienst.
Start-Service -Name wuauservStop-Service <name> — Stoppt einen Dienst.
Stop-Service -Name SpoolerRestart-Service <name> — Startet einen Dienst neu.
Restart-Service -Name nginxDateien & Text
Copy-Item <src> <dest> — Kopiert Dateien oder Verzeichnisse (Alias: cp, copy).
Copy-Item -Path .\config -Destination .\backup -RecurseMove-Item <src> <dest> — Verschiebt oder benennt Dateien um (Alias: mv, move).
Move-Item old.txt new.txtRemove-Item <path> — Löscht Dateien oder Verzeichnisse (Alias: rm, del).
Remove-Item -Path .\temp -Recurse -ForceNew-Item -ItemType File <name> — Erstellt eine neue Datei.
New-Item -ItemType File -Name config.jsonNew-Item -ItemType Directory <name> — Erstellt ein neues Verzeichnis (Alias: mkdir).
New-Item -ItemType Directory -Name logsSelect-String -Pattern '<regex>' -Path <files> — Sucht Text in Dateien (wie grep).
Select-String -Pattern 'error' -Path *.log -CaseSensitivePipeline & Filtern
| Where-Object { <condition> } — Filtert Objekte in der Pipeline.
Get-Process | Where-Object { $_.CPU -gt 100 }| Select-Object <properties> — Wählt bestimmte Eigenschaften aus Objekten aus.
Get-Process | Select-Object Name, CPU, WorkingSet | Sort-Object CPU -Descending| Sort-Object <property> — Sortiert Objekte nach einer Eigenschaft.
Get-ChildItem | Sort-Object Length -Descending| Format-Table — Gibt die Ausgabe als Tabelle aus.
Get-Service | Format-Table Name, Status, StartType| Format-List — Gibt die Ausgabe als detaillierte Liste aus.
Get-Process explorer | Format-List *| Measure-Object — Zählt, summiert, mittelt, Min/Max von Objekten.
Get-ChildItem *.log | Measure-Object -Property Length -Sum| Export-Csv <file> — Exportiert die Pipeline-Ausgabe als CSV.
Get-Process | Export-Csv processes.csv -NoTypeInformation| ConvertTo-Json — Wandelt die Ausgabe in JSON um.
Get-Service | ConvertTo-Json | Out-File services.jsonSystem & Netzwerk
Get-ComputerInfo — Zeigt detaillierte Systeminformationen.
Get-ComputerInfo | Select OsName, OsVersion, CsTotalPhysicalMemoryGet-NetIPAddress — Zeigt die IP-Adressen aller Netzwerkschnittstellen.
Get-NetIPAddress -AddressFamily IPv4Test-NetConnection <host> -Port <port> — Testet die Netzwerkverbindung (wie telnet/ping).
Test-NetConnection google.com -Port 443Invoke-WebRequest <url> — Lädt eine Webseite oder Datei herunter (Alias: curl, wget).
Invoke-WebRequest -Uri https://example.com -OutFile page.htmlInvoke-RestMethod <url> — Ruft eine REST-API auf und parst die JSON-Antwort.
Invoke-RestMethod -Uri https://api.github.com/repos/microsoft/terminalGet-WinEvent -LogName System -MaxEvents 20 — Zeigt die neuesten Einträge eines Ereignisprotokolls (Windows).
Get-WinEvent -LogName System -MaxEvents 20Variablen & Skripte
$variable = <value> — Setzt eine Variable.
$name = 'World'; Write-Host "Hello $name"$env:<VAR> — Greift auf Umgebungsvariablen zu.
$env:PATH; $env:COMPUTERNAMEif (<condition>) { } else { } — Bedingte Ausführung.
if (Test-Path .\config.json) { 'Found' } else { 'Missing' }foreach ($item in $collection) { } — Iteriert über eine Auflistung.
foreach ($f in Get-ChildItem *.txt) { Write-Host $f.Name }Set-ExecutionPolicy RemoteSigned — Erlaubt das Ausführen lokaler Skripte (einmalig nötig).
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser.\<script>.ps1 — Führt ein PowerShell-Skript aus.
.\deploy.ps1 Fazit
PowerShell verbindet interaktive Shell und vollwertige Skriptsprache – wer das objektbasierte Pipeline-Modell verinnerlicht, filtert und formatiert Daten mit Where-Object, Select-Object und Format-Table weit präziser als mit reiner Textverarbeitung. Für plattformübergreifende Arbeit greifst du zu PowerShell 7 (pwsh); das ältere Windows PowerShell 5.1 bleibt Windows-only und enthält Altlasten wie Get-EventLog. Achte auf die Execution Policy: RemoteSigned ist ein sinnvoller Standard, der lokale Skripte erlaubt, heruntergeladene aber signiert verlangt – setze nicht leichtfertig Bypass oder Unrestricted und prüfe fremde Skripte, bevor du sie ausführst.
Weiterführende Links
- Microsoft Learn: PowerShell-Dokumentation – offizielle deutschsprachige Dokumentation zu PowerShell und allen Cmdlets
- Microsoft Learn: about_Execution_Policies – Ausführungsrichtlinien verstehen und sicher konfigurieren