Błędy powodujące przerwanie działaniaTerminating Errors

W tym temacie omówiono metodę służącą do zgłaszania błędów zakończenia.This topic discusses the method used to report terminating errors. Omówiono również sposób wywoływania metody z poziomu polecenia cmdlet i omówiono wyjątki, które mogą być zwracane przez środowisko uruchomieniowe środowiska Windows PowerShell, gdy wywoływana jest metoda.It also discusses how to call the method from within the cmdlet, and it discusses the exceptions that can be returned by the Windows PowerShell runtime when the method is called.

Gdy wystąpi błąd powodujący zakończenie, polecenie cmdlet powinno zgłosić błąd, wywołując metodę System. Management. Automation. cmdlet. Throwterminatingerror * .When a terminating error occurs, the cmdlet should report the error by calling the System.Management.Automation.Cmdlet.Throwterminatingerror* method. Ta metoda umożliwia poleceniem cmdlet wysłanie rekordu błędu opisującego warunek, który spowodował błąd powodujący przerwanie.This method allows the cmdlet to send an error record that describes the condition that caused the terminating error. Aby uzyskać więcej informacji na temat rekordów błędów, zobacz rekordy błędów programu Windows PowerShell.For more information about error records, see Windows PowerShell Error Records.

Gdy wywoływana jest metoda System. Management. Automation. cmdlet. Throwterminatingerror * , środowisko uruchomieniowe programu Windows PowerShell trwale przerywa wykonywanie potoku i zgłasza wyjątek System. Management. Automation. PipelineStoppedException .When the System.Management.Automation.Cmdlet.Throwterminatingerror* method is called, the Windows PowerShell runtime permanently stops the execution of the pipeline and throws a System.Management.Automation.Pipelinestoppedexception exception. Każda kolejna próba wywołania metody System. Management. Automation. cmdlet. WriteObject, System. Management. Automation. cmdlet. WriteErrorlub kilku innych interfejsów API powoduje, że te wywołania generują wyjątek System. Management. Automation. PipelineStoppedException .Any subsequent attempts to call System.Management.Automation.Cmdlet.WriteObject, System.Management.Automation.Cmdlet.WriteError, or several other APIs causes those calls to throw a System.Management.Automation.Pipelinestoppedexception exception.

Wyjątek System. Management. Automation. PipelineStoppedException może również wystąpić, jeśli inne polecenie cmdlet w potoku zgłasza błąd powodujący przerwanie, jeśli użytkownik zażądał zatrzymania potoku lub jeśli potok został zatrzymany przed ukończeniem z jakiegokolwiek powodu.The System.Management.Automation.Pipelinestoppedexception exception can also occur if another cmdlet in the pipeline reports a terminating error, if the user has asked to stop the pipeline, or if the pipeline has been halted before completion for any reason. Polecenie cmdlet nie musi przechwycić wyjątku System. Management. Automation. PipelineStoppedException , chyba że konieczne jest oczyszczenie otwartych zasobów lub jego stanu wewnętrznego.The cmdlet does not need to catch the System.Management.Automation.Pipelinestoppedexception exception unless it must clean up open resources or its internal state.

Polecenia cmdlet mogą napisać dowolną liczbę obiektów wyjściowych lub błędy niepowodujące zakończenia przed zgłoszeniem błędu kończącego.Cmdlets can write any number of output objects or non-terminating errors before reporting a terminating error. Jednak błąd kończący trwale przerywa potok i nie można zgłosić dalszych danych wyjściowych, błędów kończących lub błędów niepowodujących zakończenia.However, the terminating error permanently stops the pipeline, and no further output, terminating errors, or non-terminating errors can be reported.

Polecenia cmdlet mogą wywołać System. Management. Automation. cmdlet. Throwterminatingerror * tylko z wątku, który wywołał metodę przetwarzania danych wejściowych System. Management. Automation. cmdlet. BeginProcessing, System. Management. Automation. cmdlet. ProcessRecordlub System. Management. Automation. cmdlet. EndProcessing .Cmdlets can call System.Management.Automation.Cmdlet.Throwterminatingerror* only from the thread that called the System.Management.Automation.Cmdlet.BeginProcessing, System.Management.Automation.Cmdlet.ProcessRecord, or System.Management.Automation.Cmdlet.EndProcessing input processing method. Nie należy podejmować próby wywołania metody System. Management. Automation. cmdlet. Throwterminatingerror * ani System. Management. Automation. cmdlet. WriteError z innego wątku.Do not attempt to call System.Management.Automation.Cmdlet.Throwterminatingerror* or System.Management.Automation.Cmdlet.WriteError from another thread. Zamiast tego błędy muszą zostać przekazane z powrotem do głównego wątku.Instead, errors must be communicated back to the main thread.

Jest możliwe, aby polecenie cmdlet zgłosiło wyjątek w implementacji metody System. Management. Automation. cmdlet. BeginProcessing, System. Management. Automation. cmdlet. ProcessRecordlub System. Management. Automation. cmdlet. EndProcessing .It is possible for a cmdlet to throw an exception in its implementation of the System.Management.Automation.Cmdlet.BeginProcessing, System.Management.Automation.Cmdlet.ProcessRecord, or System.Management.Automation.Cmdlet.EndProcessing method. Każdy wyjątek zgłoszony z tych metod (z wyjątkiem poważnych warunków błędu, które zatrzymają hosta programu Windows PowerShell) jest interpretowany jako błąd powodujący przerwanie, który zatrzymuje potok, ale nie działa w programie Windows PowerShell jako całości.Any exception thrown from these methods (except for a few severe error conditions that stop the Windows PowerShell host) is interpreted as a terminating error which stops the pipeline, but not Windows PowerShell as a whole. (Dotyczy to tylko głównego wątku poleceń cmdlet.(This applies only to the main cmdlet thread. Nieprzechwycone wyjątki w wątkach zduplikowanych przez polecenie cmdlet, ogólnie rzecz biorąc, zatrzymuje hosta programu Windows PowerShell.) Zalecamy użycie elementu System. Management. Automation. cmdlet. Throwterminatingerror * zamiast zgłaszania wyjątku, ponieważ rekord błędu zawiera dodatkowe informacje o stanie błędu, który jest przydatny dla użytkownika końcowego.Uncaught exceptions in threads spawned by the cmdlet, in general, halt the Windows PowerShell host.) We recommend that you use System.Management.Automation.Cmdlet.Throwterminatingerror* rather than throwing an exception because the error record provides additional information about the error condition, which is useful to the end-user. Polecenia cmdlet powinny być uznawane za zarządzane wytyczne dotyczące kodu, aby przechwycić i obsłużyć wszystkie wyjątki ( catch (Exception e) ).Cmdlets should honor the managed code guideline against catching and handling all exceptions (catch (Exception e)). Konwertuj tylko wyjątki znanych i oczekiwanych typów na rekordy błędów.Convert only exceptions of known and expected types into error records.

Zobacz teżSee Also

System. Management. Automation. cmdlet. BeginProcessingSystem.Management.Automation.Cmdlet.BeginProcessing

System. Management. Automation. cmdlet. EndProcessingSystem.Management.Automation.Cmdlet.EndProcessing

System. Management. Automation. cmdlet. ProcessRecordSystem.Management.Automation.Cmdlet.ProcessRecord

System. Management. Automation. PipelineStoppedExceptionSystem.Management.Automation.Pipelinestoppedexception

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

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

Rekordy błędów programu Windows PowerShellWindows PowerShell Error Records

Pisanie polecenia cmdlet programu Windows PowerShellWriting a Windows PowerShell Cmdlet