PowerShell:
Obsługa błędów

Jak to zrobić:

# Podstawowy blok Try-Catch do obsługi wyjątków
try {
    # Kod, który może wywołać błąd
    $result = 1 / 0
} catch {
    # Co zrobić, gdy wystąpi błąd
    Write-Host "Ups, wystąpił błąd: $_"
}

# Wypisywanie własnego komunikatu o błędzie
try {
    Get-Item "nonexistentfile.txt" -ErrorAction Stop
} catch {
    Write-Host "Nie można znaleźć pliku."
}

# Używanie zmiennej $Error do zbadania ostatniego błędu

Pogłębiona wiedza

PowerShell przeszedł długą drogę od czasu swoich początków jako Monad. Obsługa błędów stała się z czasem bardziej solidna, oferując funkcje podobne do tych z innych języków programowania. Składnia try-catch-finally to jeden z przykładów krzyżowania się z językami takimi jak C#. Przed jej wprowadzeniem, skrypciarze polegali głównie na sprawdzaniu warunków i używaniu automatycznej zmiennej $Error.

PowerShell ma także dwa główne typy błędów: terminujące i nieteminujące. Błędy terminujące zatrzymają skrypt, chyba że zostaną przechwycone w bloku try-catch, podczas gdy błędy nieteminujące nie zrobią tego, chyba że określisz -ErrorAction Stop. To rozróżnienie jest kluczowe, ponieważ daje precyzyjną kontrolę nad obsługą błędów, decydując czy błąd rzeczywiście wymaga zatrzymania całego skryptu lub może być po prostu zalogowany i zignorowany.

Obsługa błędów w PowerShell umożliwia także użycie bloku finally, który wykona się niezależnie od wszystkiego - bez względu na to, czy wystąpił błąd, czy nie. Jest świetny do zadań związanych z oczyszczaniem.

Kiedy jesteś głęboko w okopach skryptów, możesz także obsługiwać konkretny typ wyjątków, co daje jeszcze większą kontrolę.

Alternatywnie, istnieje stara, dobra metoda - parametr -ErrorVariable do przechwytywania błędów bez rzucania wyjątkiem. A zmienna $? informuje Cię, czy ostatnia operacja zakończyła się sukcesem. Są to przydatne narzędzia, choć nieco mniej eleganckie niż solidny blok try-catch.

Zobacz też