Kaffeeundcode

PowerShell Best Practices für Intune: Fehlerbehandlung

9. Mai 2025 Mattia

Warum Fehlerbehandlung wichtig ist

Wenn Skripte Operationen wie Dateioperationen oder Prozessverwaltung durchführen, können unerwartete Fehler auftreten. Ohne geeignete Fehlerbehandlung bleiben diese oft unbemerkt, was die Fehlersuche erschwert.

Richtige Fehlerbehandlung:
• Erhöht die Stabilität des Skripts
• Liefert hilfreiche Informationen zum Debuggen
• Verhindert, dass Skripte unerwartet abbrechen

Verwendung von Try-Catch-Blöcken

Ein Grundbaustein der Fehlerbehandlung in PowerShell ist der Einsatz von try-catch-Blöcken. So kann man einen Befehl ausführen und eventuelle Fehler sauber abfangen:
try {
Get-Content -Path „C:nichtvorhandeneDatei.txt“
} catch {
Write-Output „Etwas ist schiefgelaufen: $_“
}

Damit dies zuverlässig funktioniert, sollte der ErrorAction-Parameter auf Stop gesetzt werden, um auch nicht-abbrechende Fehler zu erfassen:

Get-Content -Path „C:nichtvorhandeneDatei.txt“ -ErrorAction Stop

Logging mit $_ und .Exception.Message

Gute Logs sind Gold wert. Wenn man eigene Meldungen mit den detaillierten Fehlermeldungen von PowerShell kombiniert, wird schnell klar, was schiefgelaufen ist:

catch {
Write-Output „Fehler abgefangen: $($_.Exception.Message)“
}

oolesche Überprüfung mit $? und Exit-Code mit $LastExitCode

Mit $? lässt sich überprüfen, ob der letzte Befehl erfolgreich war. Es gibt True bei Erfolg und False bei einem Fehler zurück:

if ($?) {
Write-Output „Operation war erfolgreich.“
} else {
Write-Output „Operation ist fehlgeschlagen.“
}

Für genauere Statusprüfungen liefert $LastExitCode den Exit-Code des zuletzt ausgeführten nativen Programms:

ping 127.0.0.1
Write-Output $LastExitCode # Gibt 0 zurück

ping 256.256.256.256
Write-Output $LastExitCode # Gibt 1 zurück

Globale Fehlerunterdrückung mit $ErrorActionPreference

Durch das Setzen von $ErrorActionPreference = ‚SilentlyContinue‘ kann man globale Fehlermeldungen unterdrücken, um die Logs übersichtlicher zu halten:

$ErrorActionPreference = ‚SilentlyContinue‘

⚠️ Vorsicht: Das kann jedoch auch kritische Fehler verschleiern – also nur gezielt einsetzen!

Fazit
Nutze strukturierte try-catch-Blöcke, aussagekräftige Logs und eine saubere Exit-Code-Behandlung – so wird dein Scripting-Alltag deutlich entspannter!