# PowerShell Mastery: Effiziente Client-Administration
TL;DR / Management Summary PowerShell ist kein einfacher Befehlszeilen-Interpreter, sondern eine objektorientierte Shell und Scripting-Umgebung. Im Gegensatz zur
cmd.exereicht PowerShell keine Textstrings weiter, sondern echte .NET Objekte. Für Senior Admins ist PowerShell das primäre Werkzeug für die Inventarisierung, Fehlerbehebung und Automatisierung über 500+ Clients hinweg. Wer PowerShell nicht beherrscht, ist im modernen Windows-Enterprise chancenlos.
# 1. Einführung & Konzepte
Objekte statt Text.
In der alten Welt (CMD) mussten wir den Output von dir mühsam mit findstr parsen. In PowerShell nutzen wir Properties.
# Das Prinzip: Verb-Noun
Befehle folgen immer dem gleichen Schema: Get-Service, Stop-Process, Set-Content.
- Aliase:
ls(Get-ChildItem),cp(Copy-Item),ps(Get-Process) – erleichtert Linux-Admins den Umstieg.
# Die Pipeline (|)
Der wichtigste Operator. Er reicht das Objekt an den nächsten Befehl weiter.
# Beispiel: Finde alle Chrome-Prozesse und beende sie
Get-Process chrome | Stop-Process
# 2. Arbeiten mit Objekten
Filtern und Sortieren.
# Where-Object (?)
Filtern Sie Datenmengen effizient:
# Zeigt alle Dienste an, die auf 'Automatic' stehen, aber nicht laufen
Get-Service | Where-Object { $_.StartType -eq "Automatic" -and $_.Status -ne "Running" }
# Select-Object
Wählen Sie nur die relevanten Spalten:
# Listet die 10 größten Dateien auf C: auf
Get-ChildItem C:\ -Recurse -ErrorAction SilentlyContinue | Sort-Object Length -Descending | Select-Object -First 10 Name, @{Name="MB";Expression={$_.Length / 1MB}}
# 3. Deep Dive: Skripting & Sicherheit
Vom Befehl zum Werkzeug.
# Execution Policy
Verhindert das versehentliche Ausführen von Schad-Skripten.
# Empfehlung für Admins: RemoteSigned
Set-ExecutionPolicy RemoteSigned
# Profile
Passen Sie Ihre Shell an. Die Datei $PROFILE wird bei jedem Start geladen.
# Beispiel: Custom Prompt im Profil
function prompt { "🚀 [$(whoami)] $(Get-Location) > " }
# 4. Day-2 Operations: Remote-Verwaltung
Administration vom Sofa aus.
# PowerShell Remoting (WinRM)
Ermöglicht die Ausführung von Befehlen auf Remote-PCs (Artikel 473).
# Führt einen Befehl auf 10 Rechnern gleichzeitig aus
Invoke-Command -ComputerName (Get-Content "C:\PCs.txt") -ScriptBlock { Get-Hotfix -Description "Security Update" }
# 5. Troubleshooting & “War Stories”
Wenn die Shell rot sieht.
# Top 3 Fehlerbilder
-
Symptom: Skript läuft manuell, aber nicht als Scheduled Task.
- Ursache: Der Task läuft als
SYSTEModer ohne geladenes User-Profil. - Lösung: Nutzen Sie absolute Pfade (z.B.
C:\Scripts\log.txtstatt.\log.txt).
- Ursache: Der Task läuft als
-
Symptom: “Die Datei ‘…’ kann nicht geladen werden, da die Ausführung von Skripts deaktiviert ist”.
- Lösung:
powershell -ExecutionPolicy Bypass -File script.ps1.
- Lösung:
-
Symptom: Langsames
Get-ChildItemauf Netzwerk-Shares.- Lösung: Nutzen Sie
-FilterstattWhere-Object, um die Filterung am Server (Quelle) durchzuführen.
- Lösung: Nutzen Sie
# “War Story”: Der “Silent” Formatierer
Ein Admin schrieb ein Script, um temporäre Dateien zu löschen. Er nutzte Remove-Item $Path\* -Recurse.
Das Problem: Durch einen Tippfehler war $Path leer. PowerShell interpretierte dies als Remove-Item \* -Recurse im aktuellen Arbeitsverzeichnis, was (da er es als Admin im System32-Ordner testete) fast das gesamte Betriebssystem löschte.
Lehre: Nutzen Sie bei zerstörerischen Befehlen immer den Parameter -WhatIf zum Testen!
# 6. Monitoring & Reporting
Inventarisierung via Script.
# Der “Health-Report” Einzeiler
Erstellen Sie einen schnellen Bericht über Ihre Clients:
$Report = [PSCustomObject]@{
ComputerName = $env:COMPUTERNAME
Uptime = (Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime
DiskFree = (Get-Volume C).SizeRemaining / 1GB
DefenderStatus = (Get-MpComputerStatus).RealTimeProtectionEnabled
}
$Report | Export-Csv "C:\Temp\Health.csv" -NoTypeInformation
# 7. Fazit & Empfehlung
PowerShell ist die wichtigste Sprache für Windows-Admins.
- Empfehlung: Nutzen Sie VS Code mit der PowerShell Extension statt der veralteten PowerShell ISE.
- Lernpfad: Meistern Sie die Hilfe (
Get-Help <Befehl> -Full). Sie ist die beste Dokumentation der Welt.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Befehl suchen | Get-Command *network* |
| Properties sehen | `Get-Service |
| Hilfe anzeigen | help Get-Service -ShowWindow |
| JSON Export | `… |
| Variablen | $MyVar = "Value" |