Szukaj…


Wprowadzenie

W tym temacie omówiono typy błędów i obsługę błędów w programie PowerShell.

Typy błędów

Błąd jest błędem, można się zastanawiać, w jaki sposób mogą być w nim typy. Cóż, w przypadku PowerShell błąd zasadniczo obejmuje dwa kryteria:

  • Błąd zakończenia
  • Błąd nie kończący się

Jak sama nazwa wskazuje, błędy kończące zakończą wykonanie, a błędy nieterminacyjne pozwolą na wykonanie kolejnej instrukcji.

Jest to prawdą, zakładając, że wartość $ ErrorActionPreference jest domyślna (Kontynuuj). $ ErrorActionPreference to zmienna preferencji, która mówi programowi PowerShell, co zrobić w przypadku błędu „Non-Terminating”.

Błąd zakończenia

Błąd zakończenia można rozwiązać za pomocą typowego try catch, jak poniżej

Try
{
    Write-Host "Attempting Divide By Zero"
    1/0
}
Catch
{
    Write-Host "A Terminating Error: Divide by Zero Caught!" 
}

Powyższy fragment kodu zostanie wykonany, a błąd zostanie przechwycony przez blok catch.

Błąd nie kończący się

Z drugiej strony błąd braku zakończenia domyślnie nie zostanie złapany w bloku catch. Przyczyną tego jest błąd nie kończący się, nie jest uważany za błąd krytyczny.

Try
{
    Stop-Process -Id 123456
}
Catch
{
    Write-Host "Non-Terminating Error: Invalid Process ID"
}

Jeśli wykonasz powyższą linię, nie otrzymasz danych wyjściowych z bloku catch, ponieważ błąd nie jest uważany za krytyczny, a wykonywanie będzie kontynuowane od następnego polecenia. Błąd zostanie jednak wyświetlony w konsoli. Aby obsłużyć błąd nie kończący się, wystarczy zmienić preferencję błędu.

Try
{
    Stop-Process -Id 123456 -ErrorAction Stop
}
Catch
{
    "Non-Terminating Error: Invalid Process ID"
}

Teraz, ze zaktualizowaną preferencją Błąd, błąd ten będzie uważany za błąd zakończenia i zostanie złapany w bloku catch.

Wywoływanie błędów kończących i nie kończących:

Polecenie cmdlet Write-Error po prostu zapisuje błąd do wywołującego programu hosta. To nie zatrzymuje wykonania. Gdzie jako rzut da ci błąd zakończenia i zatrzyma wykonanie

Write-host "Going to try a non terminating Error "
Write-Error "Non terminating" 
Write-host "Going to try a terminating Error "
throw "Terminating Error " 
Write-host "This Line wont be displayed" 


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow