Jesteś daleko od celu.
Masz już ładny, duży komunikat o błędzie. Dlaczego na Ziemi miałbyś chcieć napisać kod, który sprawdza $?
jawnie po każdym poleceniu ? Jest to niezwykle uciążliwe i podatne na błędy. Prawidłowym rozwiązaniem jest zaprzestanie sprawdzania$?
.
Zamiast tego użyj wbudowanego mechanizmu PowerShell, aby wysadzić w powietrze. Możesz to włączyć, ustawiając preferencję błędu na najwyższy poziom:
$ErrorActionPreference = 'Stop'
Umieszczam to na początku każdego skryptu, który kiedykolwiek napisałem, i teraz nie muszę tego sprawdzać $?
. To sprawia, że mój kod jest znacznie prostszy i bardziej niezawodny.
Jeśli napotkasz sytuacje, w których naprawdę musisz wyłączyć to zachowanie, możesz albo catch
błąd, albo przekazać ustawienie do określonej funkcji przy użyciu funkcji common -ErrorAction
. W Twoim przypadku prawdopodobnie chcesz, aby proces zatrzymał się przy pierwszym błędzie, złapał błąd, a następnie zarejestrował go.
Zwróć uwagę, że nie obsługuje to przypadku, gdy zewnętrzne pliki wykonywalne zawodzą (zwykle kod zakończenia niezerowy), więc nadal musisz sprawdzić, $LASTEXITCODE
czy któreś wywołujesz. Pomimo tego ograniczenia, ustawienie nadal oszczędza dużo kodu i wysiłku.
Dodatkowa niezawodność
Możesz również rozważyć użycie trybu ścisłego :
Set-StrictMode -Version Latest
Zapobiega to dyskretnemu kontynuowaniu programu PowerShell, gdy używasz nieistniejącej zmiennej oraz w innych dziwnych sytuacjach. (Zobacz -Version
parametr, aby uzyskać szczegółowe informacje o tym, co ogranicza).
Połączenie tych dwóch ustawień sprawia, że PowerShell jest znacznie bardziej odporny na awarie, co znacznie ułatwia programowanie w nim.