błąd w skrypcie PowerShell uniemożliwi jego pomyślne zakończenie. Korzystanie z obsługi błędów z blokami try catch pozwala na zarządzanie tymi błędami końcowymi i reagowanie na nie. W tym poście omówię podstawy bloków try/catch oraz jak znaleźć i obsłużyć konkretne komunikaty o wyjątkach.

zrozumienie składni

składnia try catch block jest bardzo prosta., Składa się z dwóch sekcji zamkniętych w nawiasach klamrowych, z których pierwsza oznaczona jest jako blok próby, a druga jako blok połowu.

try { # Statement to try}catch { # What to do with terminating errors}

blok try może mieć w sobie tyle poleceń, ile chcę; jednak zalecałbym trzymanie go tak mało, jak to możliwe, prawdopodobnie tylko jedną instrukcję. Punktem obsługi błędów jest praca z jednym stwierdzeniem na raz i radzenie sobie ze wszystkim, co się z nim dzieje.

oto przykład błędu występującego w konsoli PowerShell., Tutaj tworzę nowy plik używając cmdletu nowej pozycji i określam nieistniejący folder dla ścieżki:

Jeśli to było w skrypcie, wypisanie tego na ekranie zmarnowałoby trochę miejsca, a problem może nie być natychmiast widoczny. Używając try catch block, mogę zacząć manipulować wyjściem błędu i uczynić go bardziej przyjaznym dla administratora.

oto nasze polecenie nowego elementu w bloku try catch. Zauważ, że w linii 2 musiałem dodać parametr ErrorAction o wartości Stop do polecenia., Nie wszystkie błędy są uważane za „kończące”, Więc czasami muszę dodać ten bit kodu, aby poprawnie zakończyć się w bloku catch.

teraz zamiast bloku czerwonego gniewnego tekstu mam prosty komunikat ostrzegawczy, że napotkał problem. Nieistniejąca nazwa ścieżki wraz z stopem forcing-ErrorAction powoduje, że logika jest zapisywana w bloku catch i wyświetla moje własne Ostrzeżenie.

używanie zmiennej $Error

chociaż jest bardziej czytelne, nie jest to zbyt pomocne., Wiem tylko, że komenda nie zakończyła się pomyślnie, ale nie wiem dlaczego. Zamiast wyświetlania mojej niestandardowej wiadomości, mogę wyświetlić konkretny komunikat o błędzie, który wystąpił zamiast całego bloku WYJĄTKÓW czerwonego tekstu. Gdy w bloku try wystąpi błąd, zostanie on zapisany do zmiennej o nazwie $Error. Zmienna $ Error zawiera tablicę ostatnich błędów i mogę odwołać się do ostatniego błędu w tablicy w indeksie 0.,

wyjście ostrzeżenia jest teraz bardziej opisowe pokazując, że polecenie nie powiodło się, ponieważ nie mogło znaleźć części ścieżki. Ten Komunikat był częścią naszego oryginalnego Komunikatu o błędzie, ale teraz jest bardziej zwięzły.

korzystając z komunikatów WYJĄTKÓW

mogę również użyć wielu bloków Przechwytywania, jeśli chcę inaczej obsłużyć określone błędy. Tutaj mam zamiar wyświetlić dwa różne niestandardowe wiadomości, jeden dla jeśli ścieżka nie istnieje i jeden dla jeśli nielegalny znak jest używany w nazwie., Zauważ, że na poniższym zrzucie ekranu uruchomiłem skrypt dwa razy z dwoma różnymi poleceniami w bloku try. Każde polecenie, blok catch i końcowe wyjście są oznaczone pomarańczowymi i zielonymi strzałkami.

patrząc na linie 14-16, pojawia się trzeci blok przechwytywania bez komunikatu wyjątku. Jest to blok” catch-all”, który zostanie uruchomiony, jeśli błąd nie pasuje do żadnego innego wyjątku bloku catch., Jeśli uruchamiam ten skrypt i widzę wiadomość w ostatnim bloku catch, to Wiem, że błąd nie jest związany z nielegalnym znakiem w nazwie pliku lub części ścieżki nie jest poprawna.

skąd wiedziałem, że komunikaty WYJĄTKÓW mają być używane w pierwszych dwóch blokach catch? Można to znaleźć patrząc na różne informacje dołączone do zmiennej $Error. Po niepowodzeniu polecenia mogę uruchomić $Error.Wyjątek.GetType ().Pełna nazwa, aby wyświetlić komunikat wyjątku dla ostatniego błędu, który wystąpił.,

Wracając do konsoli PowerShell, przekierowałem polecenie New-Item z nieistniejącą ścieżką, a następnie uruchomiłem moje polecenie $Error, aby znaleźć komunikat wyjątku.

czerwony tekst bezpośrednio po nieudanym poleceniu zawiera również komunikat wyjątku, ale nie zawiera modułu, z którego pochodzi. Patrząc na zmienną $ Error pokazuje pełną wiadomość do użycia dla bloku catch.,

Korzystanie z bloków try / catch daje dodatkową moc w obsłudze błędów w skrypcie i podejmowaniu różnych działań w oparciu o błąd. Blok catch może wyświetlać więcej niż tylko komunikat o błędzie. Może zawierać logikę, która rozwiąże błąd i kontynuuje wykonywanie reszty skryptu.