Interpretowanie obiektów ErrorRecord

W większości przypadków obiekt System.Management.Automation.ErrorRecord reprezentuje niepowiązywający zakończenia błąd wygenerowany przez polecenie lub skrypt. Błędy przerywania mogą również określać dodatkowe informacje w rekordzie ErrorRecord za pośrednictwem interfejsu System.Management.Automation.Icontainserrorrecord.

Jeśli chcesz napisać program obsługi błędów w skrypcie lub hoście w celu obsługi określonych błędów, które występują podczas wykonywania polecenia lub skryptu, musisz zinterpretować obiekt System.Management.Automation.ErrorRecord, aby określić, czy reprezentuje on klasę błędu, którą chcesz obsłużyć.

Gdy polecenie cmdlet napotka błąd kończący lub niepowiązywający zakończenia, należy utworzyć rekord błędu opisujący warunek błędu. Aplikacja hosta musi zbadać te rekordy błędów i wykonać działania w celu ograniczenia błędu. Aplikacja hosta musi również badać rekordy błędów pod uwagę pod uwagę, które błędy nie mogły przetworzyć rekordu, ale były w stanie kontynuować, i muszą zbadać rekordy błędów pod uwagę błędów zakończenia, które spowodowały zatrzymanie potoku.

Uwaga

W przypadku błędów zakończenia polecenie cmdlet wywołuje metodę System.Management.Automation.Cmdlet.Throwterminatingerror*. W przypadku błędów niepowczasujących zakończenia polecenie cmdlet wywołuje metodę System.Management.Automation.Cmdlet.WriteError.

Projekt rekordu błędu

Rekordy błędów mają na celu zapewnienie dodatkowych informacji o błędzie, które nie są dostępne w wyjątkach, przy jednoczesnym zapewnieniu, że połączone informacje w każdym rekordzie błędu są unikatowe. Dzięki tej unikatowości aplikacja hosta może sprawdzić różne części rekordu błędu, aby zidentyfikować warunek błędu i akcję, które musi wykonać host.

Interpretowanie rekordów błędów

Aby zidentyfikować błąd, możesz przejrzeć kilka części rekordu błędu. Te części obejmują następujące elementy:

  • Kategoria błędów

  • Wyjątek błędu

  • W pełni kwalifikowany identyfikator błędu (FQID)

  • Inne informacje

Kategoria błędu

Kategoria błędu rekordu błędu jest jedną ze wstępnie zdefiniowanych stałych dostarczanych przez wyliczenie System.Management.Automation.Errorcategory. Te informacje są dostępne za pośrednictwem właściwości System.Management.Automation.ErrorRecord.CategoryInfo obiektu System.Management.Automation.ErrorRecord.

Polecenie cmdlet może określać kategorie CloseError, OpenError, InvalidType, ReadError i WriteError oraz inne kategorie błędów. Aplikacja hosta może używać kategorii błędów do przechwytywania grup błędów.

Wyjątek

Wyjątek uwzględniony w rekordzie błędu jest dostarczany przez polecenie cmdlet i można uzyskać do niego dostęp za pośrednictwem właściwości System.Management.Automation.ErrorRecord.Exception* obiektu System.Management.Automation.ErrorRecord.

Aplikacje hosta mogą używać słowa kluczowego , aby określić, że wyjątek jest is określonej klasy lub klasy pochodnej. Lepiej jest rozgałęzieć typ wyjątku, jak pokazano w poniższym przykładzie.

if (MyNonTerminatingError.Exception is AccessDeniedException)

W ten sposób przechwytuje się klasy pochodne. Istnieją jednak problemy, jeśli deserializacji wyjątku.

The FQID

FQID to najbardziej szczegółowe informacje, których można użyć do zidentyfikowania błędu. Jest to ciąg, który zawiera zdefiniowany przez polecenie cmdlet identyfikator, nazwę klasy polecenia cmdlet i źródło, które zgłosiło błąd. Ogólnie rzecz biorąc, rekord błędu jest analogiczny do rekordu zdarzenia Windows dziennika zdarzeń. Identyfikator FQID jest analogiczny do następującej krotki, która identyfikuje klasę rekordu zdarzenia:(nazwa dziennika, źródło, identyfikator zdarzenia).

FQID jest przeznaczony do inspekcji jako pojedynczy ciąg. Istnieją jednak przypadki, w których identyfikator błędu jest przeznaczony do analizy przez aplikację hosta. Poniższy przykład to dobrze uformowany w pełni kwalifikowany identyfikator błędu.

CommandNotFoundException,Microsoft.PowerShell.Commands.GetCommandCommand.

W poprzednim przykładzie pierwszym tokenem jest identyfikator błędu, po którym następuje nazwa klasy polecenia cmdlet. Identyfikator błędu może być pojedynczym tokenem lub może być identyfikatorem rozdzielonych kropkami, który umożliwia rozgałęzienie podczas inspekcji identyfikatora. W identyfikatorze błędu nie należy używać białych znaków ani znaków interpunkcji. Szczególnie ważne jest, aby nie używać przecinka; Przecinek jest używany przez Windows PowerShell do oddzielenia identyfikatora i nazwy klasy polecenia cmdlet.

Inne informacje

Obiekt System.Management.Automation.ErrorRecord może również zawierać informacje opisujące środowisko, w którym wystąpił błąd. Te informacje obejmują takie elementy jak szczegóły błędu, informacje o wywołaniach i obiekt docelowy, który był przetwarzany w momencie wystąpienia błędu. Chociaż te informacje mogą być przydatne dla aplikacji hosta, zwykle nie są one używane do identyfikowania błędu. Te informacje są dostępne za pośrednictwem następujących właściwości:

System.Management.Automation.ErrorRecord.ErrorDetails

System.Management.Automation.ErrorRecord.InvocationInfo

System.Management.Automation.ErrorRecord.TargetObject

Zobacz też

System.Management.Automation.ErrorRecord

System.Management.Automation.Errorcategory

System.Management.Automation.Errorcategoryinfo

System.Management.Automation.Cmdlet.WriteError

System.Management.Automation.Cmdlet.Throwterminatingerror*

Dodawanie raportowania błędów niepowodujących zakończenia działania do polecenia cmdlet

Raportowanie błędów programu Windows PowerShell

Pisanie polecenia cmdlet programu Windows PowerShell