Ukončující chyby

Toto téma popisuje metodu použitou k hlášení ukončování chyb. Popisuje také, jak volat metodu z rutiny, a popisuje výjimky, které mohou být vráceny modulem runtime Prostředí Windows PowerShell při volání metody.

Když dojde k ukončovací chybě, rutina by měla ohlásit chybu voláním System.Management.Automation.Cmdlet.ThrowTerminatingError* metoda. Tato metoda umožňuje rutině odeslat záznam chyby popisující podmínku, která způsobila ukončovací chybu. Další informace o záznamech chyb najdete v tématu Záznamy chyb prostředí Windows PowerShell.

Když se volá metoda System.Management.Automation.Cmdlet.ThrowTerminatingError*, modul runtime Windows PowerShellu trvale zastaví spuštění kanálu a vyvolá výjimku System.Management.Automation.PipelineStoppedException. Všechny následné pokusy o volání System.Management.Automation.Cmdlet.WriteObject, System.Management.Automation.Cmdlet.WriteErrornebo několik dalších rozhraní API způsobí, že tato volání vyvolá System.Management.Automation.PipelineStoppedException výjimka.

Výjimka System.Management.Automation.PipelineStoppedException může nastat také v případě, že jiná rutina v kanálu hlásí ukončující chybu, pokud uživatel požádal o zastavení kanálu nebo pokud byl kanál zastaven před dokončením z nějakého důvodu. Rutina nemusí zachytit výjimku System.Management.Automation.PipelineStoppedException výjimku, pokud nesmí vyčistit otevřené prostředky nebo jeho vnitřní stav.

Rutiny můžou před nahlášením ukončovací chyby zapsat libovolný počet výstupních objektů nebo neukončující chyby. Ukončující chyba však kanál trvale zastaví a není možné hlásit žádné další výstupy, ukončující chyby nebo neukončující chyby.

Rutiny mohou volat System.Management.Automation.Cmdlet.ThrowTerminatingError* pouze z vlákna, které se nazývá System.Management.Automation.Cmdlet.BeginProcessing, System.Management.Automation.Cmdlet.ProcessRecordnebo System.Management.Automation.Cmdlet.EndProcessing metodu zpracování vstupu. Nepokoušejte se volat System.Management.Automation.Cmdlet.ThrowTerminatingError* nebo System.Management.Automation.Cmdlet.WriteError z jiného vlákna. Místo toho musí být chyby předány zpět do hlavního vlákna.

Rutina může vyvolat výjimku v jeho implementaci System.Management.Automation.Cmdlet.BeginProcessing, System.Management.Automation.Cmdlet.ProcessRecordnebo System.Management.Automation.Rutin.EndProcessing metoda. Jakákoli výjimka vyvolaná těmito metodami (s výjimkou několika závažných chybových podmínek, které zastaví hostitele Windows PowerShellu), se interpretuje jako ukončující chyba, která kanál zastaví, ale ne jako celek. (To platí jenom pro hlavní vlákno rutiny. Nezachycené výjimky ve vláknech vytvořených rutinou obecně zastavují hostitele Windows PowerShellu.) Doporučujeme místo vyvolání výjimky použít System.Management.Automation.Cmdlet.ThrowTerminatingError* místo vyvolání výjimky, protože záznam chyby poskytuje další informace o chybovém stavu, což je užitečné pro koncového uživatele. Rutiny by měly dodržovat pokyny ke spravovanému kódu proti zachytávání a zpracování všech výjimek (catch (Exception e)). Převede pouze výjimky známých a očekávaných typů na chybové záznamy.

Viz také

System.Management.Automation.Cmdlet.BeginProcessing

System.Management.Automation.Cmdlet.EndProcessing

System.Management.Automation.Cmdlet.ProcessRecord

System.Management.Automation.PipelineStoppedException

System.Management.Automation.Cmdlet.ThrowTerminatingError*

System.Management.Automation.Cmdlet.WriteError

záznamy chyb Windows PowerShellu

psaní rutiny Prostředí Windows PowerShell