
Michael Cain
0
1322
124
Kiedy po raz pierwszy zaczynasz pisać w PowerShell, może być kuszące, aby spakować serię poleceń Polecenia cmdlet programu PowerShell, które poprawią umiejętności administratora Windows Polecenia cmdlet programu PowerShell, które poprawią umiejętności administratora systemu Windows PowerShell to narzędzie wiersza polecenia i język skryptowy. Daje to możliwość zautomatyzowania komputera za pomocą tych samych poleceń, których używasz do administrowania nim. . Jeśli jednak skrypt zawiedzie, nie będziesz wiedział, od czego zacząć rozwiązywanie problemów. Aby uniknąć marnowania czasu na odgadywanie przyczyn niepowodzenia skryptu, należy skorzystać z obsługi błędów.
Obsługa błędów programu PowerShell składa się z czterech części: parametru Działanie błędu, bloków Try / Catch, parametru Zmienna błędu i rejestrowania.
Błąd programu PowerShell w prosty sposób
Po raz pierwszy chcesz obsługiwać błędy, gdy coś zatrzymuje skrypt w toku. Jeśli awaria nie wpłynie na twoje dalsze kroki, najlepiej po prostu ją pominąć i przejść dalej.
Z drugiej strony nie zawsze jest jasne, kiedy dane polecenie cmdlet zgłasza błąd zakończenia. Niektóre polecenia cmdlet zwracają błąd, ale nie zatrzymują skryptu. Możesz wtedy skończyć na oczekiwaniu na zakończenie skryptu, dopóki nie wygeneruje bzdur.
To gdzie -ErrorAction parametr pojawia się. Używasz go, aby zmusić polecenie cmdlet do obsługi błędu w pożądany sposób. Jeśli modyfikujesz istniejący skrypt Zwiększ produktywność za pomocą skryptów Windows PowerShell Zwiększ produktywność za pomocą skryptów Windows PowerShell Co zrobić, jeśli możesz przenieść produktywność Linuksa na Windows? Większość dystrybucji Linuksa jest dostarczana z potężną powłoką Bash. PowerShell to równie wydajny terminal dla systemu Windows. , dołączasz go na końcu wiersza polecenia cmdlet.
Get-ChildItem -Path "~ \ Documents \ *.. Jpg" -Recurse -ErrorAction Stop
Oczywiście, jeśli używasz Get-ChildItem cmdlet sam w sobie, błąd niewiele dla ciebie robi. Jeśli jednak chcesz cokolwiek zrobić z danymi, dobrze byłoby zatrzymać skrypt, aby wiedzieć, że wyszukiwanie nie powiodło się i dlaczego. Alternatywnie, jeśli wykonujesz wiele wyszukiwań, zmień parametr z Zatrzymać do Po cichu kontynuuj, więc skrypt kontynuuje działanie, jeśli wyszukiwanie się nie powiedzie. Jeśli chcesz zobaczyć, jaki jest błąd, możesz użyć dalej zamiast tego jako parametr.
Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction SilentlyContinue
Jeśli wolisz mieć możliwość kontrolowania tego, co dzieje się przy każdym uruchomieniu skryptu, możesz to zmienić na Dowiadywać się. Gdy cmdlet trafi w zaczep, daje opcje: Tak, Tak dla wszystkich, Zatrzymaj polecenie, Zawieś lub Pomoc.
Ta opcja jest nieco bardziej elastyczna, ale oznacza, że błędy powodują, że skrypt czeka na dane wejściowe. To może nie być coś, czego potrzebujesz, gdy przeprowadzasz długi proces przez noc.
Błąd podczas obsługi sposobu programowania
The ErrorAction parametr rozwiązuje Twoje błędy w nieskomplikowany sposób. Jednak jeśli szukasz nieco większej kontroli nad błędami, PowerShell wciąż Cię obejmuje. Za pomocą Próbuj złapać, możemy teraz rozgałęzić skrypt, gdy polecenia cmdlet zwrócą błąd.
Jak sama nazwa wskazuje, Próbuj złapać składa się z dwóch części. (Technicznie jest jedna trzecia, ale dojdziemy do tego za minutę.) Pierwsza to Próbować Sekcja. Zamierzasz uruchomić swój normalny kod w tej sekcji. Nadal będziesz korzystać z -ErrorAction parametr, ale można go ustawić tylko jako Zatrzymać. Ta flaga zapewnia, że twoje polecenie cmdlet wyzwala Złapać-nawet jeśli nie ma błędu zakończenia.
Wypróbuj Get-Process „Cortana” -ErrorAction Stop
Try może także uniemożliwić uruchomienie innych poleceń cmdlet, jeśli wyszukiwanie się nie powiedzie. W takim przypadku, jeśli wysyłasz Get-Process wyniki do Zatrzymaj proces, nieudane wyszukiwanie uniemożliwia uruchomienie drugiego polecenia cmdlet.
Więc teraz, gdy masz już utworzony blok poleceń cmdlet, co chcesz zrobić, gdy się nie powiedzie? Używając Złapać połowa, zamierzasz to zdefiniować.
Złap Write-Host „Nie znaleziono procesu”
Jak w przypadku ErrorAction parametr, gdy robisz coś nieco bardziej złożonego 3 Sprytne funkcje PowerShell po aktualizacji do Windows 10 3 Sprytne funkcje PowerShell po aktualizacji do Windows 10 Windows 10 oferuje nam nowy PowerShell, głównie Wiersz polecenia na sterydach. W tym artykule pokazano, jak zrobić inaczej niemożliwe za pomocą programu PowerShell. I jest to łatwiejsze niż myślisz! Złapać przydadzą się więcej niż zwykłe awarie językowe. (W powyższym przykładzie niepowodzenie jest wymuszone przez użycie nazwy aplikacji, a nie nazwy procesu). Upewnij się więc, że grasz Próbować zablokuj, aby utworzyć wyszukiwanie / akcję, której potrzebujesz. Możesz użyć Złapać zablokuj skrypt, aby wysłał Ci e-maila, jeśli się nie powiedzie.
Trzecia część jest przydatna, jeśli chcesz coś uruchomić bez względu na to, czy polecenie cmdlet się powiedzie, czy nie. W tym celu możesz użyć Wreszcie blok. Dodajesz to po Try and Catch i logujesz, gdy kończy się część skryptu.
Zmienna błędu i rejestrowanie
Twój skrypt kontroluje teraz, w jaki sposób obsługuje błędy i jak na nie reaguje. Możesz użyć go jako zaplanowanego zadania lub przynajmniej uruchomić go, gdy nie ma Cię przy biurku. 5 powodów, dla których powinieneś użyć programu PowerShell zamiast skryptów wsadowych 5 powodów, dla których powinieneś użyć programu PowerShell zamiast skryptów wsadowych przekroczyłem Wiersz Poleceń ze skryptami wsadowymi, dodałem kilka dodatkowych funkcji i wyrzuciłem to wszystko o kilka stopni. Oto kilka powodów, dla których powinieneś spróbować. . Jak jednak zbadać nieudany skrypt? Z -ErrorVariable parametr zapisuj błędy cmdleta w zmiennej niestandardowej. Jest to alternatywa dla systemu Błąd $ zmienna, która zawiera wszystkie błędy z bieżącej sesji.
Twoje polecenie cmdlet musi trochę się wydłużyć. Najpierw zdefiniuj zmienną, coś w rodzaju $ SearchError zrobi na przykład. Kiedy zadzwonisz SearchError w ErrorVariable parmeter, nie używasz znaku dolara. Nawet jeśli wywołujesz utworzoną zmienną, ze względu na sposób działania parametru wywołujesz go bez znaku dolara. Następnie dodaj to na końcu linii.
Get-ChildItem -Path "~ \ Documents \ *. .Jpg" -Recurse -ErrorAction Kontynuuj -ErrorVariable SearchError
Jeśli dodasz + przed nazwą zmiennej można dodać do zmiennej, a nie zastąpić ją wprost. To zapewnia takie samo zachowanie jak globalna zmienna błędu. Zamiast tego możesz użyć tego wyjścia i Próbuj złapać napisać niestandardowe wyjście i oznaczyć je znacznikiem czasu.
Aby to zadziałało, utwórz plik tekstowy zaraz po ustawieniu zmiennej błędu. Zrób to z Nowa pozycja cmdlet. Możesz użyć Dowiadywać się opcja dla ErrorAction parametr. Pozwala to dodać do istniejącego dziennika, gdy Nowa pozycja polecenie cmdlet kończy się niepowodzeniem.
$ SearchLog = Nowy plik „~ \ SearchLog.txt” -typ pliku -ErrorAction Zapytanie
Teraz, kiedy zbudujesz swój Próbuj złapać blok, możesz użyć Złapać zalogować się do pliku tekstowego. Używasz Get-Date utworzyć znacznik czasu. Formatowanie może być trudne, więc skopiuj to z przykładu.
Spróbuj Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Stop -ErrorVariable SearchError Złap Add-Content -Path $ SearchLog -Value "$ (Get-Date -Format dd-MM-rr- hh_mm_ss) Błąd nie znaleziono plików: $ SearchError "
Powtórz to w razie potrzeby dla wszystkich poleceń cmdlet 15 Zaawansowane zadania PowerShell może obsłużyć w Windows 10 15 Zaawansowane zadania PowerShell może obsłużyć w Windows 10 PowerShell jest podobny do wiersza poleceń, ale lepiej. To potężne narzędzie do administrowania systemem. Zebraliśmy 15 zadań, niektóre proste, niektóre złożone, które korzystają z magii PowerShell. , a teraz masz ładny dziennik wszelkich błędów. Jeśli chcesz śledzić rzeczy, które działają poprawnie, możesz dodać podobny Dodaj zawartość na końcu Próbować blok. To rejestrowanie działa tylko wtedy, gdy Próbować polecenie cmdlet kończy się powodzeniem. Następnie możesz rejestrować swoje błędy i sukcesy za pomocą znaczników czasu. Rejestrowanie pozwala teraz poznać wszystko, co zrobił skrypt, sukces lub porażkę.
Moc kodu
Korzystanie z programu PowerShell w wierszu polecenia Wiersz polecenia a Windows PowerShell: jaka jest różnica? Wiersz polecenia a Windows PowerShell: jaka jest różnica? Użytkownicy systemu Windows mogą sobie z tym poradzić bez użycia wiersza polecenia lub programu PowerShell. Ale z Windows 10 i nowymi funkcjami za rogiem, może już czas się nauczyć. to potężny sposób zarządzania systemem. Możesz łączyć te same polecenia razem w sposób umożliwiający wydajną automatyzację. Właściwa obsługa błędów jest niezbędna, aby zapewnić, że skrypty robią tylko to, co chcesz. Rejestrowanie wszystkiego pozwala zaoszczędzić czas podczas rozwiązywania problemów.
Czy zdarzyło się, że obsługa błędów uratowała ci bekon? Czy masz skrypt programu PowerShell, który mógłby wykorzystać lepszą obsługę błędów? Jaki jest twój następny projekt PowerShell? Daj nam znać w komentarzach.