Jak poprawnie zakończyć działanie skryptu za pomocą polecenia wyjścia programu PowerShell
Funkcja Exit w programie PowerShell to dziwna, ale przydatna rzecz, zwłaszcza gdy chcesz skrócić działanie skryptów. W zasadzie mówi ona programowi PowerShell: „To wystarczy, zakończ”, niezależnie od tego, czy zakończyłeś skrypt, funkcję, czy nawet zamknąłeś całe okno konsoli. Czasami skrypty napotykają błędy lub sytuacje, w których kontynuowanie nie ma sensu — wtedy wywoływana jest funkcja Exit. Rzecz jednak w tym, że nie każdy w pełni rozumie, jak i kiedy jej używać, zwłaszcza początkujący. Albo okazuje się, że zachowuje się ona nieco inaczej w zależności od kontekstu, co może być mylące. Dlatego ten artykuł może nieco to wyjaśnić, z przykładami z życia wziętymi i kilkoma haczykami.
Jak prawidłowo korzystać z wyjścia programu PowerShell
Metoda 1: Wyjście ze skryptu, gdy coś pójdzie nie tak lub gdy spełnione zostaną warunki
Za każdym razem, gdy skrypt napotka nieoczekiwany błąd lub osiągnie stan, w którym kontynuacja może spowodować problemy, możesz dodać Exit. To tak, jakby powiedzieć: „Nie, zakończ tutaj”.Gdy skrypt wywołuje Exit, program PowerShell zatrzymuje wszystko i wysyła kod wyjścia do systemu operacyjnego. Jest to przydatne, jeśli skrypt jest uruchamiany w ramach większego pakietu lub zadania i chcesz zasygnalizować powodzenie ( Exit 0) lub niepowodzenie (coś w stylu Exit 1).
Typowy przypadek użycia może wyglądać następująco:
# Check for an error condition if ($errorCondition) { Write-Host "Oh no, error detected. Exiting..." Exit 1 # Standard error code } Write-Host "All good, continuing..."
W niektórych przypadkach, na jednej konfiguracji działa idealnie, ale na innej skrypt może nie zakończyć działania od razu — ponieważ PowerShell w środowiskach IDE lub na konkretnych hostach zachowuje się inaczej. Mimo to, w wierszu poleceń jest zazwyczaj niezawodny.
Metoda 2: Wyjście z funkcji lub całego skryptu
Tu zaczyna się robić trudno. Wywołanie Exitwewnątrz funkcji kończy działanie całego skryptu — a nie tylko samej funkcji. Jeśli więc masz funkcję do walidacji i coś jest nie tak, wywołanie Exitzakończy wszystko. Nie zawsze jest to pożądane, ale czasami jest przydatne. Na przykład:
function Check-User { param($user) if ($user -eq "") { Write-Host "No user supplied. Exiting all scripts now..." Exit 1 } Write-Host "User=$user" } Check-User -user "" Write-Host "This line won't run if user was empty."
Należy jednak pamiętać, że w skryptach wywoływanych z innych skryptów lub zaplanowanych zadań polecenie Exit zatrzyma również skrypt nadrzędny — należy więc używać go ostrożnie.
Metoda 3: Zamykanie konsoli PowerShell
A potem następuje wielki finał – Exitzamknięcie terminala programu PowerShell. Podobnie jak w wierszu poleceń, po uruchomieniu Exit 0programu PowerShell po prostu się wyłącza. Przydatne, jeśli skrypt ma być ostatnią czynnością, którą uruchamia. Na przykład:
# Finish cleanly Exit 0 # Success exit code
To zamknie okno bez pozostawiania zawieszonych procesów. Oczywiście, prawdopodobnie nie chcesz tego w sesjach interaktywnych, chyba że używasz skryptu do automatycznego zamykania lub czyszczenia. Ale na serwerach lub w zaplanowanych zadaniach? Niezły sposób na eleganckie zakończenie.
Dodatkowa wskazówka: różnice między wyjściem, przerwą i powrotem
FYI, PowerShell ma również Breaki Return.Break…forwhileReturn
Szczerze mówiąc, sztuką Exitjest zrozumienie, że to potężny młot – zatrzymuje wszystko. Używaj go mądrze, bo możesz przypadkowo przedwcześnie zakończyć skrypt lub sesję. Oczywiście Windows musi to utrudniać bardziej, niż to konieczne.
Powiązane artykuły
Czy ten artykuł był pomocny?