Website-Suche

Fehlerbehandlung in PowerShell meistern: Try, Catch und Finally


Die Fehlerbehandlung ist ein kritischer Aspekt beim Schreiben robuster Skripte in jeder Programmiersprache. PowerShell bietet eine mächtige Struktur zur eleganten Handhabung von Fehlern mit Hilfe von try, catch und finally-Blöcken. Diese Konstrukte ermöglichen es uns, Ausnahmen zu verwalten und sicherzustellen, dass wichtige Aufräumaktionen durchgeführt werden, selbst wenn Fehler auftreten. In diesem Blogbeitrag zeige ich Ihnen, wie Sie try catch finally in PowerShell verwenden. Lassen Sie uns anfangen.

Verstehen von Try, Catch und Finally

Der try-Block enthält den Code, der einen Fehler verursachen kann. Wenn ein Fehler auftritt, wird der catch-Block ausgeführt, der es Ihnen ermöglicht, den Fehler zu behandeln. Der finally-Block ist optional und enthält Code, der unabhängig davon ausgeführt wird, ob ein Fehler aufgetreten ist oder nicht.

Lass uns einen Blick auf die Syntax werfen.

try {
    # Code that might throw an exception
} catch {
    # Code to handle the error
} finally {
    # Code that runs regardless of whether an error occurred
}

Hier sind zwei weitere Beispiele, auf denen Sie aufbauen können.

Try {
    1/0
}
Catch {
    $_.Exception # Error Message
 }

In diesem Beispiel wird die Fehlermeldung angezeigt, wenn ein Fehler auftritt. Sie kennen die $_ Variable vielleicht als Pipeline-Variable.

Und hier ein weiteres Beispiel, das praktischer ist und ein reales Szenario darstellt.

$ErrorActionPreference="Stop"
Try {
    Get-ChildItem -Path C:\notthere
}
Catch {
    Write-Warning "Folder not present."
}

Du kannst dich jetzt fragen, warum ich die $ErrorActionPreference-Variable verwendet habe. Probier es ohne Änderung der Fehlerbehandlung aus! Ich werde nicht funktionieren!

In diesem Beispiel sorgt das Setzen von ErrorActionPreference auf Stop dafür, dass der nicht-terminierende Fehler des Get-ChildItem-Befehls vom Catch-Block erfasst wird, was eine angemessene Fehlerbehandlung ermöglicht. Der Fehler wird kein terminierender Fehler sein, es handelt sich in der Tat um einen nicht-terminierenden Fehler, wodurch PowerShell den Catch-Block ignoriert.

Mit Try-Catch-Blöcken sollten Sie daher immer im Hinterkopf behalten, dass der Fehler ein nicht-terminierender Fehler sein könnte, der Ihre Catch-Funktion ignoriert.