Jak korzystać z PowerShell Spróbuj złapać wreszcie, aby poradzić sobie z błędami
PowerShell Próbuj złapać blok służy do obsługi błędów w skryptach PowerShell. Podczas korzystania z PowerShell Próbuj złapać blok do skryptów można osiągnąć:
- Uruchom skrypt, aby działał pomimo błędu
- Lepiej wyświetlaj i obsługuj komunikaty o błędach
W tym przewodniku dowiesz się, jak korzystać z Powershell Próbuj złapać bloki do obsługi komunikatów o błędach zakończenia w PowerShell. Dodatkowo dowiesz się, jak uwzględniać Wreszcie blok w a Próbuj złapać blok.
Przewodnik zaczyna się od składni Próbuj złapać blok.
Przeglądaj tematy postów
- Wypróbuj składnię programu PowerShell™
- Typowe typy błędów wyjątków w PowerShell Spróbuj złapać
- Jak przechwytywać określone wyjątki za pomocą PowerShell Spróbuj złapać
- Jak dołączyć blok Last do PowerShell Try Catch Statement?
- Dodatkowe przydatne informacje o PowerShell Spróbuj Catch
- Jak wyczyścić PowerShell Spróbuj złapać automatyczną zmienną $Error
- Jak wyświetlić niestandardowy komunikat o błędzie w PowerShell Spróbuj Catch Block
- Jak uzyskać informacje o błędach CategoryInfo w PowerShell Spróbuj złapać?
- Jak używać Write-Host do wyświetlania komunikatów o błędach w PowerShell Spróbuj złapać
- Jak stworzyć tablicę haszującą w PowerShell Wypróbuj blokadę
- PowerShell Spróbuj złapać przykłady
- Jak korzystać z PowerShell Spróbuj złapać za pomocą Get-Childitem
- Jak korzystać z PowerShell Spróbuj złapać, aby wyeksportować błędy Get-WMIObject za pomocą Export-csv
- Jak wyłapać błędy procesu pobierania za pomocą PowerShell Try Catch Statement
- Jak złapać błędy Get-Mailbox za pomocą PowerShell Try Catch Statement
- Referencje i dalsza lektura
PowerShell Próbuj złapać Składnia
Składnia PowerShell Próbuj złapać jest…
|_+_|
ten Próbować jest częścią bloku, którą PowerShell ma monitorować pod kątem błędów. To jest blok z oryginalnymi skryptami, które mogą zwrócić błąd kończący.
Gdy w bloku Try wystąpi błąd, program PowerShell zapisuje go w zmiennej automatycznej $Error (więcej na ten temat później).
Z drugiej strony t on łapać oświadczenie PowerShell Próbuj złapać blok obsługuje błędy generowane w bloku try. Możesz również określić typy błędów, które są obsługiwane w ramach Łapać blok instrukcji.
ten Wreszcie blok może być użyty do zwolnienia wszelkich zasobów, które nie są już potrzebne skryptowi.
Typowe typy błędów wyjątków w PowerShell Próbuj złapać
W bloku programu PowerShell Try Catch można obsługiwać różne typy błędów. Na przykład możesz obsłużyć określone błędy.
Dodatkowo możesz obsługiwać ogólne komunikaty o błędach. Jednak, aby poradzić sobie z konkretnymi typami błędów, musisz znać typ błędu.
w dalszej części tego przewodnika dowiesz się, że komunikaty o błędach są zapisywane w zmiennej automatycznej $error. Dodatkowo błędy mogą być również zapisywane w zmiennej potoku $_.
Ponadto błędy zapisane w zmiennej automatycznej $error są zapisywane w tablicy. Aby pomóc to wyjaśnić, uruchommy polecenie, które zwraca kończący komunikat o błędzie:
Aby usunąć wszystkie błędy zapisane wcześniej w $błąd zmienna automatyczna, zanim uruchomisz poniższe polecenie, najpierw uruchom $błąd.Wyczyść() Komenda. |_+_| Nie ma dziennika zdarzeń o nazwie Systerr, więc polecenie w bloku Try spowoduje wyświetlenie komunikatu o błędzie.Co zaskakujące, polecenie nie wyświetlało żadnego komunikatu o błędzie. Co się stało z komunikatem o błędzie?
Jest on zapisywany w zmiennej automatycznej $error! Aby wyświetlić błąd z ostatniego polecenia zapisanego w zmiennej $error, uruchom polecenie…
|_+_|Wynik polecenia wyświetla szczegóły błędu zapisane w zmiennej automatycznej $error. Informacje o błędzie mają sekcję o nazwie FullyQualifiedErrorId .
W przypadku tego konkretnego błędu FullyQualifiedErrorId posiada dwa zestawy informacji – System.InvalidOperationException oraz Microsoft.PowerShell.Commands.GetEventLogCommand .
Informacje, które nas interesują to System.InvalidOperationException . To jest rodzaj błędu, który możesz łapać w bloku Try Catch programu PowerShell.
Aby uzyskać nazwę tego wyjątku PowerShell, uruchom poniższe polecenie:
|_+_|Tu jest, System.InvalidOperationException !
W następnych kilku podrozdziałach omówię typowe błędy PowerShell Try Catch Exception Errors.
Wypróbuj PowerShell CommandNotFoundException Błąd
Jeśli uruchomisz polecenie, które nie istnieje w PowerShell lub Microsoft Command Prompt, otrzymasz komunikat o błędzie. Na przykład, jeśli uruchomisz Dostać plik pojawi się komunikat o błędzie, ponieważ to polecenie nie jest prawidłowym poleceniem cmdlet PowerShell.
Oto zrzut ekranu wyniku polecenia w PowerShell…
Jak widać na zrzucie ekranu, typ wyjątku (FullyQualifiedErrorId ) to CommandNotFoundException .
Ponieważ jest to błąd kończący, spowoduje to zatrzymanie działania skryptu. Aby powstrzymać ten błąd przed zakończeniem skryptu, zapakuj polecenie w a Próbuj złapać blok.
Jeśli zawiniemy ten błąd w bloku PowerShell Try Catch, PowerShell pominie błąd. Co więcej, zatrzyma to zakończenie twojego skryptu.
Jednak nawet jeśli błąd jest pomijany, jest zapisywany w zmiennej $error. Jak zwykle, zanim uruchomisz poniższe polecenie, najpierw wyczyść błędy zapisane w zmiennej $error.
|_+_|Jeśli chcesz uruchomić polecenie w PowerShell zamiast PowerShell ISE, wpisz polecenia w jednym wierszu, jak pokazano poniżej:
|_+_|Następnie, aby wyświetlić błąd, uruchom…
|_+_|
Jak wspomniałem w głównym wprowadzeniu do tej sekcji, aby wyświetlić identyfikator wyjątku dla tego błędu, uruchom poniższe polecenie:
|_+_|Pełna nazwa wyjątku to System.Management.Automation.CommandNotFoundException .
Wypróbuj PowerShell ManagementObjectNotFoundException Błąd
Gdy uruchomisz polecenie w zdalnej sesji PS z nieprawidłowymi informacjami, PowerShell zwróci a ManagementObjectNotFoundException błąd.
Typowy scenariusz to połączenie z Office 365 za pomocą PowerShell. Następnie uruchom polecenie Get-User, ale podaj niewłaściwego użytkownika tożsamość .
Aby złapać ten błąd za pomocą PowerShell Try Catch, użyj polecenia podobnego do poniższego:
|_+_| Łapanie ManagementObjectNotFoundException błąd z PowerShell Try, Catch jest szczególnie trudny. Musisz użyć BłądAkcja parametr i określ Zatrzymać . W przeciwnym razie, nawet przy opcji Try, Catch, błąd będzie nadal wyświetlany.Na koniec, aby uzyskać nazwę wyjątku, użyj poniższego polecenia:
|_+_|Polecenie zwraca typ wyjątku jako System.Management.Automation.RemoteException . Więc co jest ManagementObjectNotFoundException ?
ManagementObjectNotFoundException jest przyczyną wyjątku potwierdzoną poniższym poleceniem:
|_+_|
Wypróbuj PowerShell UnauthorizedAccessException Błąd
Innym częstym błędem wyjątku PowerShell jest: UnauthorizedAccessException . Ten rodzaj błędu jest generowany, gdy próbujesz uzyskać dostęp do elementu, do którego nie masz co najmniej uprawnień do odczytu.
Aby zilustrować ten przykład, odmówiłem uwierzytelnionym użytkownikom dostępu do określonego pliku na moim komputerze.
Teraz, jeśli próbuję uzyskać dostęp do pliku za pomocą polecenia Get-Content, otrzymuję komunikat o odmowie dostępu.
|_+_|
Aby zatrzymać wyświetlanie tego błędu, uruchom polecenie w bloku PowerShell Try Catch, jak pokazano poniżej…
|_+_|Niestety powyższe polecenie nie zatrzymuje wyświetlania błędu. Powodem jest to, że nie jest to błąd kończący.
Aby zatrzymać wyświetlanie błędu, dołącz BłądAkcja parametr i określ Zatrzymać .
|_+_|Teraz polecenie pomija błąd. Aby wyświetlić typ wyjątku, uruchom poniższe polecenie…
|_+_|Typ wyjątku to System.UnauthorizedAccessException .
Istnieje więcej typów błędów wyjątków niż to, o czym mowa w tej sekcji. Omówiłem tylko najczęstsze typy wyjątków.Jak przechwytywać określone wyjątki za pomocą PowerShell Spróbuj złapać
W ostatniej sekcji omówiono typowe wyjątki PowerShell i jak znaleźć typ wyjątku. W tej sekcji omówimy, jak wykorzystać te informacje do przechwytywania określonych typów komunikatów o błędach.
W sekcji dotyczącej składni tego przewodnika powiedziałem, że ogólna składnia programu PowerShell Try Catch Finally to…
|_+_|W bloku catch składni można zobaczyć [typ błędu]. W tym miejscu określasz typ błędu, który chcesz przechwycić w tym bloku.
Na przykład, aby wyłapać błędy UnauthorizedAccessException, użyj poniższych instrukcji…
|_+_|Aby uruchomić polecenie w PowerShell, określ instrukcje w jednym wierszu. Pierwsza część instrukcji – $error.Clear() – usuwa wszelkie błędy zapisane w zmiennej $error.
|_+_|Jak dodać wiele Łapać Bloki w PowerShell Próbuj złapać Oświadczenie
We wstępie do tej sekcji pokazałem, jak złapać określony typ wyjątku w Łapać blok. Możesz określić wiele
Oto przykład…
|_+_|W tym przykładzie pierwszy łapać blok obsługuje określone typy wyjątków. Co więcej, drugi łapać uchwyty blokowe obsługują ogólne błędy.
Jak wyodrębnić wyjątek błędu za pomocą PowerShell Spróbuj złapać?
W ostatnim podrozdziale opisano, jak określić wiele bloków catch do obsługi różnych typów wyjątków. W tym podrozdziale dowiesz się, jak wyodrębnić szczegóły błędu w wyjątku.
Aby to zilustrować, posłużę się przykładem, którego użyłem wcześniej. Uruchom tę instrukcję PowerShell w PowerShell.
|_+_|Teraz uruchom sam $error…
|_+_|Chociaż w zmiennej $error zapisanych jest wiele informacji, rzeczywisty komunikat o błędzie jest podświetlony na poniższym zrzucie ekranu.
Jeśli chcesz zarejestrować ten błąd w pliku tekstowym, wystarczy zarejestrować rzeczywiste szczegóły błędu. Aby wyodrębnić ten błąd, użyj poniższego polecenia:
|_+_|Polecenie wyodrębnia rzeczywisty komunikat o błędzie Dostęp do ścieżki „D:PS-Tutorialfolder-names.txt” jest zabroniony.
Możesz zapisać ten komunikat o błędzie w pliku dziennika, dołączając Wyjdź z pliku polecenie w bloku Catch.
|_+_| uwzględniłem Dodać parametr w Wyjdź z pliku polecenie, aby umożliwić rejestrowanie wielu wpisów bez nadpisywania poprzednich wpisów.Aby ułatwić zrozumienie ostatniego polecenia, przepiszę je w poniższym formacie skryptu…
|_+_|Jak uwzględnić A Wreszcie Zablokuj w PowerShell Próbuj złapać Oświadczenie
Możesz dołączyć Wreszcie blok do PowerShell Próbuj złapać Oświadczenie. Składnia to
|_+_|ten wreszcie blok może być użyty do zwolnienia wszelkich zasobów, które nie są już potrzebne skryptowi.
Blok Last jest uruchamiany, nawet jeśli użyjesz CTRL+C do zatrzymania skryptu. Blok zostanie również uruchomiony, jeśli słowo kluczowe Exit zatrzyma skrypt z bloku Catch.W ostatnim przykładzie miałem instrukcję, która zapisuje dziennik błędów do pliku tekstowego w Łapać blok. Jednak najlepszym miejscem na to oświadczenie jest Wreszcie blok.
Zobacz zmodyfikowany skrypt poniżej…
|_+_|Dodatkowe przydatne informacje o PowerShell Spróbuj Catch
W tej sekcji podzielę się kilkoma prostymi, ale przydatnymi informacjami na temat PowerShell Try Catch.
Jak wyczyścić PowerShell Spróbuj złapać automatyczną zmienną $Error
Automatyczna zmienna $error ma Jasne Metoda. Możesz użyć tej metody do usunięcia wszystkich błędów zapisanych w zmiennej automatycznej $error.
Aby usunąć wszystkie błędy zapisane w zmiennej automatycznej $error dla bieżącej sesji programu PowerShell, uruchom poniższe polecenie.
|_+_|Jak wyświetlić niestandardowy komunikat o błędzie w PowerShell Spróbuj Catch Block
Aby wyświetlić niestandardowy komunikat o błędzie w bloku Try Catch w programie PowerShell, użyj wyrazu Throw. Oto przykład…
|_+_|Oto wynik tego skryptu w PowerShell ISE .
Jak uzyskać informacje o błędach CategoryInfo w PowerShell Spróbuj złapać?
Zmienna automatyczna $error ma właściwość o nazwie CategoryInfo. Aby zobaczyć tę właściwość oraz inne właściwości i metody, uruchom poniższe polecenie…
|_+_|Jedna z właściwości zwracanych przez ostatnie polecenie to Informacje o kategorii .
Aby uzyskać dostęp do tych informacji, uruchom poniższe polecenie.
|_+_|To polecenie zwraca wiele właściwości podrzędnych.
Dostęp do każdej z tych właściwości podrzędnych można uzyskać, dodając nazwę właściwości podrzędnej po kropce. Na przykład, aby wyświetlić podwłaściwości Reason, uruchom poniższe polecenie.
|_+_|
Jak używać Write-Host do wyświetlania komunikatów o błędach w PowerShell Spróbuj złapać
Podobnie jak właściwość CategoryInfo w ostatniej podsekcji, zmienna automatyczna $error ma również właściwość o nazwie Wyjątek . Aby wyświetlić wyjątek w błędzie, uruchom poniższe polecenie:
|_+_|
Niestety, jeśli spróbujesz wyświetlić te informacje za pomocą polecenia Write-Host, nie zadziała zgodnie z oczekiwaniami.
|_+_|Oto wynik tego polecenia w PowerShell…
Jak widać, polecenie wyświetla wiele innych informacji. Dobrą wiadomością jest to, że $błąd.Wyjątek ma inną właściwość o nazwie Wiadomość .
Możesz nazwać tę właściwość podrzędną, dołączając ją do $błąd.Wyjątek , lubię to…
|_+_|Dodatkowo możesz użyć Zapis-host polecenie, aby wyświetlić te informacje o błędzie…
|_+_|Ostatnie polecenie wyświetla teraz rzeczywisty komunikat o błędzie…
Tyle że istnieje konkretny powód do użycia Zapis-host jak pokazano w ostatnim poleceniu, możesz po prostu wyświetlić ten sam komunikat o błędzie za pomocą $błąd.Wyjątek Komenda.Jak stworzyć tablicę haszującą w PowerShell Wypróbuj blokadę
Istnieją dwa popularne sposoby tworzenia Tablica haszująca PowerShell w bloku Try Catch.
- Możesz utworzyć tablicę mieszającą z wieloma parami klucz/wartość w bloku Try
- Alternatywnie możesz utworzyć pojedynczą tabelę hashowania klucz/wartość za pomocą Klucz na zewnątrz Spróbuj Catc h blok i wartość w obrębie Spróbuj Catc blok h.
Oto przykład pierwszej metody…
|_+_|Jak widać hasttable znajduje się w obrębie Spróbuj Catc h blok…
Z drugiej strony możesz utworzyć pojedynczy klucz tablicy haszującej z wartością zdefiniowaną w ramach a Spróbuj Catc blok h. Oto przykład…
|_+_|Aby potwierdzić, że ostatni skrypt tworzy tablicę haszującą PowerShell, po uruchomieniu skryptu wywołałem wartości zapisane w zmiennej $hashtable.
Jak widać z wyniku ostatniego polecenia, ma parę Nazwa/Wartość!
PowerShell Spróbuj złapać przykłady
W tej ostatniej sekcji omówię wiele przykładów zastosowania PowerShell Try Catch.
Jak korzystać z PowerShell Próbuj złapać Z Get-Childitem
Polecenie Get-Childitem może zwrócić wiele błędów. Aby zilustrować dwa typowe błędy, użyję dwóch poniższych poleceń:
|_+_|Prawidłowa ścieżka do pliku tekstowego użytego w ostatnim poleceniu to D:PS-Tutorialfilelist.txt.
Jednak w pierwszym poleceniu umieściłem spację po D:PS-Tutorial. Spowodowało to błąd (wkrótce ustalimy szczegóły błędu).
Ponadto w drugim poleceniu podałem poprawną ścieżkę, ale użyłem niewłaściwej nazwy pliku. Spowodowało to błąd.
|_+_|
Idąc dalej, aby uzyskać więcej informacji o tych błędach, uruchomię polecenia w PowerShell Próbuj złapać blok.
|_+_|Naszym pierwszym zadaniem jest określenie typów błędów zwracanych przez polecenia. Aby uzyskać te informacje, uruchom poniższe polecenia…
|_+_|Oto wyniki poleceń…
Błędy zapisane w zmiennej automatycznej $error są przechowywane w tablicy programu PowerShell. Dostęp do każdego obiektu w tablicy uzyskuje się przez dodanie [0], [1] na końcu tablicy. 0 reprezentuje pierwszy element w tablicy, a 1 reprezentuje drugi element i tak dalej.Powrót do uzyskiwania dodatkowych informacji o błędach zgłaszanych przez Get-Childitem polecenie, w oparciu o typy błędów, możemy zmodyfikować nasz blok Try Catch, aby przechwycić te 2 typy błędów…
|_+_|Naszym drugim zadaniem jest wyświetlanie aktualnych komunikatów o błędach. To polecenie wykona zadanie:
|_+_|Polecenie wyświetla dwa komunikaty o błędach…
Jak korzystać z PowerShell Próbuj złapać Aby wyeksportować błędy Get-WMIObject za pomocą Export-csv
W tej podsekcji wyeksportuję błędy generowane podczas uruchamiania Pobierz-WMIObject na zdalnym komputerze do pliku CSV z Eksportuj-csv Komenda.
Najpierw zobaczmy szczegóły błędu generowane podczas próby połączenia się ze zdalnym komputerem offline za pomocą Pobierz-WMIObject . Aby to zilustrować, uruchom poniższe polecenie…
|_+_|Polecenie wygenerowało komunikat o błędzie, ponieważ Komputer nie jest prawidłową nazwą komputera.
Idąc dalej, aby zarządzać błędem, uruchomię polecenie w ramach Próbować blok Próbuj złapać oświadczenie.
|_+_|W pierwszym wierszu Próbować bloku, zdefiniowałem zmienną $ComputerName. Następnie w drugim wierszu uruchomiłem Get-WmiObject Komenda.
Ponadto w Łapać bloku, stworzyłem szczegóły błędu wyeksportowałem go do pliku CSV za pomocą Eksportuj-csv .
Oto szczegółowe wyjaśnienie skryptu w Próbować blok:
- W wierszu 1 utworzyłem zmienną $path, która określa, gdzie chcę zapisać plik CSV
- Następnie w wierszu 2 użyłem polecenia Get-Date, aby utworzyć nazwę pliku dla pliku CSV. Nazwa pliku jest w formacie, rrrrMMdd_GGmmss.csv
- W linii 3 utworzyłem pusty obiekt zapisany w zmiennej o nazwie $data
- Następnie w wierszu 4 dodałem kolumnę „Nazwa komputera” do obiektu utworzonego w wierszu 3. Kolumna przyjmuje zmienną $Nazwa komputera
- W wierszu 5 dodałem głośność „Komunikat o błędzie”, który będzie zapisywał komunikaty o błędach, $error.Exception.Message
- Następnie w wierszu 6 utworzyłem zmienną $csvfilepath, która łączy zmienne $path i $csvfilename, aby utworzyć pełną ścieżkę do pliku CSV
- Wreszcie, w wierszu 7, przesłałem informacje zapisane w zmiennej $data ($ComputerName i $error.Exception.Message) do Eksportuj-csv i zapisał plik w $csvfilepath
Poniższy zrzut ekranu pokazuje plik CSV utworzony przez skrypt…
Jak wyłapać błędy procesu pobierania za pomocą PowerShell Próbuj złapać Oświadczenie
Jeśli uruchomisz polecenie Get-Process z identyfikatorem procesu, który nie istnieje, zwróci a Microsoft.PowerShell.Commands.ProcessCommandException błąd.
Aby przechwycić ten konkretny typ wyjątku, uruchom polecenie podobne do poniższego:
|_+_|Oto wynik działania skryptu w PowerShell ISE.
Alternatywnie możesz zdefiniować niestandardowy komunikat o błędzie, modyfikując skrypt, jak pokazano poniżej…
|_+_|Teraz skrypt zwraca niestandardowy komunikat o błędzie…
Jak złapać błędy Get-Mailbox za pomocą PowerShell? Próbuj złapać Oświadczenie
Jeśli połączysz się z Office 365 PowerShell i uruchomisz Pobierz skrzynkę pocztową przeciwko użytkownikowi, który nie istnieje, otrzymasz komunikat o błędzie. Niektórzy użytkownicy zgłaszali problemy z przechwyceniem komunikatu o błędzie w Pobierz skrzynkę pocztową Komenda.
Aby przetestować ten scenariusz, po podłączeniu do naszego Konto Office 365 przez PowerShell uruchomiłem poniższy skrypt:
|_+_| Użytkownik Pius nie istnieje na naszym koncie Office 365.Skrypt zwrócił komunikat o błędzie Operacja nie mogła zostać wykonana, ponieważ nie można znaleźć obiektu „Pius” na „AM6PR05A05DC002.EURPR05A005.PROD.OUTLOOK.COM „.
Oto zrzut ekranu…
Jeśli jednak Próbuj złapać wykrywa błąd, spróbuj dodać typ wyjątku, jak pokazano w zmodyfikowanym poleceniu poniżej:
|_+_|To wszystko – nasz obszerny i zaktualizowany przewodnik po PowerShell Spróbuj złapać finał leżeć! Mam nadzieję, że okazało się to pomocne?
Jeśli uznałeś to za pomocne, uprzejmie zagłosuj tak do Czy ten post był pomocny w poniższym pytaniu.
Alternatywnie możesz zadać pytanie, zostawić komentarz lub przekazać więcej opinii za pomocą formularza Zostaw odpowiedź, który znajduje się na końcu tej strony.
Aby uzyskać więcej informacji o strefach PowerShell tech S, odwiedź naszą stronę z instrukcjami dotyczącymi programu Windows PowerShell. Bardzo pomocna może być również nasza strona Praca z Home.
Popcorn Time Chromecast Android
Referencje i dalsza lektura
- O spróbuj złapać wreszcie
- O pułapce
- PowerShell Array i Add to Array: aplikacje i przykłady
- Objaśnienie Powershell For Loop: składnia i przykłady


