PowerShell
Obsługa błędów
Szukaj…
Wprowadzenie
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"