Interpretowanie obiektów ErrorRecord

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

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

Gdy polecenie cmdlet napotka błąd zakończenia lub niepowodujący zakończenia, powinien utworzyć rekord błędu opisujący warunek błędu. Aplikacja hosta musi zbadać te rekordy błędów i wykonać dowolną akcję, aby wyeliminować błąd. Aplikacja hosta musi również zbadać rekordy błędów błędów niepowodujących zakończenia błędów, które nie mogły przetworzyć rekordu, ale były w stanie kontynuować, i musi zbadać rekordy błędów w celu zakończenia błędów, 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 niepowodujących zakończenia polecenie cmdlet wywołuje metodę System.Management.Automation.Cmdlet.WriteError.

Projekt rekordu błędu

Rekordy błędów zostały zaprojektowane w celu zapewnienia dodatkowych informacji o błędach, które nie są dostępne w wyjątkach, przy jednoczesnym zapewnieniu, że połączone informacje w każdym rekordzie błędów są unikatowe. Ta unikatowość umożliwia aplikacji hosta inspekcję różnych części rekordu błędu, dzięki czemu może zidentyfikować warunek błędu i akcję, którą 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łędów rekordu błędu jest jedną ze wstępnie zdefiniowanych stałych dostarczonych przez System.Management.Automation.ErrorCategory wyliczenie. 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 nich dostęp za pośrednictwem System.Management.Automation.ErrorRecord.Exception właściwości System.Management.Automation.ErrorRecord.

Aplikacje hosta mogą używać słowa kluczowego is, aby zidentyfikować, że wyjątek jest określoną klasą lub klasą pochodną. Lepiej rozgałęzić typ wyjątku, jak pokazano w poniższym przykładzie.

`if (MyNonTerminatingError.Exception is AccessDeniedException)`
{
  ...
}

W ten sposób przechwytujesz klasy pochodne. Jednak występują problemy, jeśli wyjątek jest deserializowany.

Identyfikator FQID

Identyfikator FQID to najbardziej szczegółowe informacje, których można użyć do zidentyfikowania błędu. Jest to ciąg zawierający identyfikator zdefiniowany przez polecenie cmdlet, nazwę klasy poleceń 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 dziennika zdarzeń systemu Windows. Identyfikator FQID jest analogiczny do następującej krotki, która identyfikuje klasę rekordu zdarzenia: ( nazwa dziennika, źródłowy, identyfikator zdarzenia ).

Identyfikator FQID został zaprojektowany tak, aby był sprawdzany jako pojedynczy ciąg. Istnieją jednak przypadki, w których identyfikator błędu jest przeznaczony do analizowania przez aplikację hosta. Poniższy przykład to dobrze sformułowany w pełni kwalifikowany identyfikator błędu.

CommandNotFoundException,Microsoft.PowerShell.Commands.GetCommandCommand.

W poprzednim przykładzie pierwszy token to identyfikator błędu, po którym następuje nazwa klasy poleceń cmdlet. Identyfikator błędu może być pojedynczym tokenem lub może być identyfikatorem rozdzielanym kropką, który umożliwia rozgałęzianie po inspekcji identyfikatora. Nie używaj białych znaków ani znaków interpunkcyjnych w identyfikatorze błędu. Szczególnie ważne jest, aby nie używać przecinka; Przecinek jest używany przez program 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ą elementy, takie jak szczegóły błędu, informacje o wywołaniu i obiekt docelowy, który był przetwarzany podczas wystąpienia błędu. Chociaż te informacje mogą być przydatne dla aplikacji hosta, zazwyczaj nie są używane do identyfikowania błędu. Te informacje są dostępne za pośrednictwem następujących właściwości:

Zobacz też