Interpretowanie obiektów ErrorRecordInterpreting ErrorRecord Objects

W większości przypadków obiekt System. Management. Automation. ErrorRecord reprezentuje błąd niepowodujący zakończenia wygenerowany przez polecenie lub skrypt.In most cases, an System.Management.Automation.ErrorRecord object represents a non-terminating error generated by a command or script. Błędy powodujące przerwanie mogą również określać dodatkowe informacje w ErrorRecord za pośrednictwem interfejsu System. Management. Automation. Icontainserrorrecord .Terminating errors can also specify the additional information in an ErrorRecord via the System.Management.Automation.Icontainserrorrecord interface.

Jeśli chcesz napisać procedurę obsługi błędów w skrypcie lub hoście do obsługi określonych błędów występujących podczas wykonywania polecenia lub skryptu, należy interpretować obiekt System. Management. Automation. ErrorRecord , aby określić, czy reprezentuje klasę błędu, który ma być obsługiwany.If you want to write an error handler in your script or a host to handle specific errors that occur during command or script execution, you must interpret the System.Management.Automation.ErrorRecord object to determine whether it represents the class of error that you want to handle.

Gdy polecenie cmdlet napotyka błąd kończący się lub niekończący, powinien utworzyć rekord błędu opisujący warunek błędu.When a cmdlet encounters a terminating or non-terminating error, it should create an error record that describes the error condition. Aplikacja hosta musi zbadać te rekordy błędów i wykonać wszelkie działania, które spowodują złagodzenie błędu.The host application must investigate these error records and perform whatever action will mitigate the error. Aplikacja hosta musi także zbadać rekordy błędów dla niezakończonych błędów, które nie powiodło się 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.The host application must also investigate error records for nonterminating errors that failed to process a record but were able to continue, and it must investigate error records for terminating errors that caused the pipeline to stop.

Uwaga

Aby można było przerywać błędy, polecenie cmdlet wywołuje metodę System. Management. Automation. cmdlet. Throwterminatingerror * .For terminating errors, the cmdlet calls the System.Management.Automation.Cmdlet.Throwterminatingerror* method. W przypadku błędów niekończących polecenie cmdlet wywołuje metodę System. Management. Automation. cmdlet. WriteError .For non-terminating errors, the cmdlet calls the System.Management.Automation.Cmdlet.WriteError method.

Projekt rekordu błęduError Record Design

Rekordy błędów zaprojektowano w celu udostępnienia 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.Error records are designed to provide additional error information that is not available in exceptions while ensuring that the combined information in each error record is unique. Ta unikatowość umożliwia aplikacji hosta inspekcję różnych części rekordu błędu, aby można było zidentyfikować warunek błędu i akcję, którą musi wykonać host.This uniqueness allows the host application to inspect the different parts of the error record so that it can identify the error condition and the action the host must take.

Interpretowanie rekordów błędówInterpreting Error Records

Możesz przejrzeć kilka części rekordu błędu, aby zidentyfikować błąd.You can review several parts of the error record to identify the error. Te części obejmują następujące elementy:These parts include the following:

  • Kategoria błęduThe error category

  • Wyjątek błęduThe error exception

  • W pełni kwalifikowany Identyfikator błędu (FQID)The fully qualified error identifier (FQID)

  • Inne informacjeOther information

Kategoria błęduThe Error Category

Kategoria błędów rekordu błędu jest jedną ze wstępnie zdefiniowanych stałych dostarczonych przez Wyliczenie System. Management. Automation. ErrorCategory .The error category of the error record is one of the predefined constants provided by the System.Management.Automation.Errorcategory enumeration. Te informacje są dostępne za pomocą właściwości System. Management. Automation. ErrorRecord. CategoryInfo obiektu System. Management. Automation. ErrorRecord .This information is available through the System.Management.Automation.ErrorRecord.CategoryInfo property of the System.Management.Automation.ErrorRecord object.

Polecenie cmdlet może określać kategorie CloseError, OpenError, nieprawidłowe, ReadError i WriteError oraz inne kategorie błędów.The cmdlet can specify the CloseError, OpenError, InvalidType, ReadError, and WriteError categories, and other error categories. Aplikacja hosta może używać kategorii błędów do przechwytywania grup błędów.The host application can use the error category to capture groups of errors.

WyjątekThe Exception

Wyjątek zawarty w rekordzie błędu jest dostarczany przez polecenie cmdlet i można uzyskać do niego dostęp za pomocą właściwości System. Management. Automation. ErrorRecord. Exception * obiektu System. Management. Automation. ErrorRecord .The exception included in the error record is provided by the cmdlet and can be accessed through the System.Management.Automation.ErrorRecord.Exception* property of the System.Management.Automation.ErrorRecord object.

Aplikacje hosta mogą użyć is słowa kluczowego, aby określić, że wyjątek jest określonej klasy lub klasy pochodnej.Host applications can use the is keyword to identify that the exception is of a specific class or of a derived class. Lepiej jest utworzyć gałąź dla typu wyjątku, jak pokazano w poniższym przykładzie.It is better to branch on the exception type, as shown in the following example.

if (MyNonTerminatingError.Exception is AccessDeniedException)

W ten sposób wychwytuje klasy pochodne.This way, you catch the derived classes. Występują jednak problemy w przypadku deserializacji wyjątku.However, there are problems if the exception is deserialized.

FQIDThe FQID

FQID to najbardziej szczegółowe informacje, których można użyć do zidentyfikowania błędu.The FQID is the most specific information you can use to identify the error. Jest to ciąg, który zawiera identyfikator zdefiniowany przez polecenie cmdlet, nazwę klasy poleceń cmdlet i źródło, które zgłosiło błąd.It is a string that includes a cmdlet-defined identifier, the name of the cmdlet class, and the source that reported the error. Ogólnie rzecz biorąc rekord błędu jest podobny do rekordu zdarzenia w dzienniku zdarzeń systemu Windows.In general, an error record is analogous to an event record of a Windows Event log. FQID jest analogiczny do następującej krotki, która identyfikuje klasę rekordu zdarzenia: (Nazwa dziennika, Źródło, Identyfikator zdarzenia).The FQID is analogous to the following tuple, which identifies the class of the event record: (log name, source, event ID).

FQID jest zaprojektowana tak, aby była sprawdzana jako jeden ciąg.The FQID is designed to be inspected as a single string. Jednak istnieją przypadki, w których Identyfikator błędu został zaprojektowany do analizowania przez aplikację hosta.However, cases exist in which the error identifier is designed to be parsed by the host application. Poniższy przykład jest poprawnie sformułowanym w pełni kwalifikowanym identyfikatorem błędu.The following example is a well-formed fully qualified error identifier.

CommandNotFoundException,Microsoft.PowerShell.Commands.GetCommandCommand.

W poprzednim przykładzie pierwszy token jest identyfikatorem błędu, po którym następuje nazwa klasy poleceń cmdlet.In the previous example, the first token is the error identifier, which is followed by the name of the cmdlet class. Identyfikator błędu może być pojedynczym tokenem lub może być identyfikatorem oddzielonym kropką, który umożliwia rozgałęzianie w celu przeprowadzenia inspekcji identyfikatora.The error identifier can be a single token, or it can be a dot-separated identifier that allows for branching on inspection of the identifier. W identyfikatorze błędu nie należy używać odstępów ani znaków interpunkcyjnych.Do not use white space or punctuation in the error identifier. Jest to szczególnie ważne, aby nie używać przecinka; Program Windows PowerShell używa przecinka do oddzielenia identyfikatora i nazwy klasy poleceń cmdlet.It is especially important not to use a comma; a comma is used by Windows PowerShell to separate the identifier and the cmdlet class name.

Inne informacjeOther Information

Obiekt System. Management. Automation. ErrorRecord może również zawierać informacje opisujące środowisko, w którym wystąpił błąd.The System.Management.Automation.ErrorRecord object might also provide information that describes the environment in which the error occurred. Te informacje obejmują elementy, takie jak szczegóły błędu, informacje o wywołaniu i obiekt docelowy, który był przetwarzany po wystąpieniu błędu.This information includes items such as error details, invocation information, and the target object that was being processed when the error occurred. Chociaż te informacje mogą być przydatne dla aplikacji hosta, nie są zwykle używane do identyfikowania błędu.Although this information might be useful to the host application, it is not typically used to identify the error. Te informacje są dostępne w następujących właściwościach:This information is available through the following properties:

System. Management. Automation. ErrorRecord. ErrorDetailsSystem.Management.Automation.ErrorRecord.ErrorDetails

System. Management. Automation. ErrorRecord. InvocationInfoSystem.Management.Automation.ErrorRecord.InvocationInfo

System. Management. Automation. ErrorRecord. TargetObjectSystem.Management.Automation.ErrorRecord.TargetObject

Zobacz teżSee Also

System. Management. Automation. ErrorRecordSystem.Management.Automation.ErrorRecord

System. Management. Automation. ErrorCategorySystem.Management.Automation.Errorcategory

System. Management. Automation. ErrorcategoryinfoSystem.Management.Automation.Errorcategoryinfo

System. Management. Automation. cmdlet. WriteErrorSystem.Management.Automation.Cmdlet.WriteError

System. Management. Automation. cmdlet. Throwterminatingerror *System.Management.Automation.Cmdlet.Throwterminatingerror*

Dodawanie raportowania błędów niepowodujących zakończenia działania do polecenia cmdletAdding Non-Terminating Error Reporting to Your Cmdlet

Raportowanie błędów programu Windows PowerShellWindows PowerShell Error Reporting

Pisanie polecenia cmdlet programu Windows PowerShellWriting a Windows PowerShell Cmdlet