PowerShell – try … catch … finally – Errorhandling

Mit der “try … catch” Funktion steht ein Hilfsmittel zur vernünftigen Fehlerbehandlung zur Verfügung.

Grundfunktion:

try {
Mach irgendwas
}
catch {
Mach was anderes im Fehlerfall
}
finally {
Mach noch was anderes in beiden Fällen
}

Ein Anwendungsbeispiel:

Sie haben eine Liste mit Anmeldenamen und möchsten wissen, ob die zugehörigen AD Konten noch existieren:

ForEach ($user in $users) {
Try {
Get-AdUser $user | Out-Null
Write-Host “$User existiert”
}
Catch {
Write-Host “$User existiert nicht”
}
}

Stolpersteine:

Da “catch” ausschließlich sogenannte “terminating errors” interpretieren kann, muss die unter “try” verwendete Funktion im Fehlerfalle auch einen solchen zurückliefern. Das ist aber nicht immer der Fall. Testen Sie das gleiche Beispiel mal mit dem Get-Mailbox CMDLet.

ForEach ($user in $users) {
Try {
Get-Mailbox $user | Out-Null
Write-Host “$User existiert”
}
Catch {
Write-Host “$User existiert nicht”
}
}

Das wird nicht funktionieren, weil eben Get-Mailbox keinen “terminating error” zurückliefert. Get-Mailbox dazu zu bringen das zu tun, ist mit der Option ErrorAction machbar.

ForEach ($user in $users) {
Try {
Get-Mailbox $user -ErrorAction Stop| Out-Null
Write-Host “$User existiert”
}
Catch {
Write-Host “$User existiert nicht”
}
}