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-Location

Set-Location <path> — Wechselt das Verzeichnis (Alias: cd).

Set-Location C:\Users

Get-ChildItem — Listet Dateien und Verzeichnisse auf (Alias: ls, dir).

Get-ChildItem -Recurse -Filter *.log

Get-Content <file> — Zeigt den Inhalt einer Datei (Alias: cat, type).

Get-Content C:\logs\app.log -Tail 20

Get-Command <name> — Findet Kommandos nach Name oder Muster.

Get-Command *-Service

Get-Help <cmdlet> — Zeigt die Hilfe zu einem Cmdlet.

Get-Help Get-Process -Examples

Get-Alias <alias> — Zeigt, worauf ein Alias verweist.

Get-Alias ls

Prozesse & Dienste

Get-Process — Listet alle laufenden Prozesse auf.

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

Stop-Process -Name <name> — Beendet einen Prozess anhand des Namens.

Stop-Process -Name notepad

Stop-Process -Id <pid> — Beendet einen Prozess anhand der PID.

Stop-Process -Id 1234 -Force

Get-Service — Listet alle Dienste auf.

Get-Service | Where-Object Status -eq Running

Start-Service <name> — Startet einen Dienst.

Start-Service -Name wuauserv

Stop-Service <name> — Stoppt einen Dienst.

Stop-Service -Name Spooler

Restart-Service <name> — Startet einen Dienst neu.

Restart-Service -Name nginx

Dateien & Text

Copy-Item <src> <dest> — Kopiert Dateien oder Verzeichnisse (Alias: cp, copy).

Copy-Item -Path .\config -Destination .\backup -Recurse

Move-Item <src> <dest> — Verschiebt oder benennt Dateien um (Alias: mv, move).

Move-Item old.txt new.txt

Remove-Item <path> — Löscht Dateien oder Verzeichnisse (Alias: rm, del).

Remove-Item -Path .\temp -Recurse -Force

New-Item -ItemType File <name> — Erstellt eine neue Datei.

New-Item -ItemType File -Name config.json

New-Item -ItemType Directory <name> — Erstellt ein neues Verzeichnis (Alias: mkdir).

New-Item -ItemType Directory -Name logs

Select-String -Pattern '<regex>' -Path <files> — Sucht Text in Dateien (wie grep).

Select-String -Pattern 'error' -Path *.log -CaseSensitive

Pipeline & 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.json

System & Netzwerk

Get-ComputerInfo — Zeigt detaillierte Systeminformationen.

Get-ComputerInfo | Select OsName, OsVersion, CsTotalPhysicalMemory

Get-NetIPAddress — Zeigt die IP-Adressen aller Netzwerkschnittstellen.

Get-NetIPAddress -AddressFamily IPv4

Test-NetConnection <host> -Port <port> — Testet die Netzwerkverbindung (wie telnet/ping).

Test-NetConnection google.com -Port 443

Invoke-WebRequest <url> — Lädt eine Webseite oder Datei herunter (Alias: curl, wget).

Invoke-WebRequest -Uri https://example.com -OutFile page.html

Invoke-RestMethod <url> — Ruft eine REST-API auf und parst die JSON-Antwort.

Invoke-RestMethod -Uri https://api.github.com/repos/microsoft/terminal

Get-WinEvent -LogName System -MaxEvents 20 — Zeigt die neuesten Einträge eines Ereignisprotokolls (Windows).

Get-WinEvent -LogName System -MaxEvents 20

Variablen & Skripte

$variable = <value> — Setzt eine Variable.

$name = 'World'; Write-Host "Hello $name"

$env:<VAR> — Greift auf Umgebungsvariablen zu.

$env:PATH; $env:COMPUTERNAME

if (<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.

Verwandte Kommandos

  • bash – die GNU-Bourne-Again-Shell, Standard-Shell unter Linux
  • zsh – die Z shell mit erweiterter Completion und Plugins
  • wsl – Windows-Subsystem für Linux, brückt PowerShell und Linux-Shells