Fel som avbryter körningen

I det här avsnittet beskrivs den metod som används för att rapportera avslutande fel. Den beskriver också hur du anropar metoden inifrån cmdleten och diskuterar de undantag som kan returneras av Windows PowerShell-körningen när metoden anropas.

När ett avslutande fel inträffar bör cmdleten rapportera felet genom att anropa metoden System.Management.Automation.Cmdlet.ThrowTerminatingError*. Med den här metoden kan cmdleten skicka en felpost som beskriver villkoret som orsakade avslutningsfelet. Mer information om felposter finns i Windows PowerShell-felposter.

När System.Management.Automation.Cmdlet.ThrowTerminatingError*-metoden anropas stoppar Windows PowerShell-körningen körningen av pipelinen permanent och genererar ett System.Management.Automation.PipelineStoppedException undantag. Alla efterföljande försök att anropa System.Management.Automation.Cmdlet.WriteObject, System.Management.Automation.Cmdlet.WriteErroreller flera andra API:er gör att dessa anrop genererar ett System.Management.Automation.PipelineStoppedException undantag.

System.Management.Automation.PipelineStoppedException undantag kan också inträffa om en annan cmdlet i pipelinen rapporterar ett avslutande fel, om användaren har bett om att stoppa pipelinen eller om pipelinen har stoppats innan den har slutförts av någon anledning. Cmdleten behöver inte fånga System.Management.Automation.PipelineStoppedException undantag om den inte måste rensa öppna resurser eller dess interna tillstånd.

Cmdletar kan skriva valfritt antal utdataobjekt eller icke-avslutande fel innan de rapporterar ett avslutande fel. Det avslutande felet stoppar dock pipelinen permanent, och inga ytterligare utdata, avslutande fel eller icke-avslutande fel kan rapporteras.

Cmdletar kan anropa System.Management.Automation.Cmdlet.ThrowTerminatingError* endast från tråden som kallas System.Management.Automation.Cmdlet.BeginProcessing, System.Management.Automation.Cmdlet.ProcessRecordeller System.Management.Automation.Cmdlet.EndProcessing indatabearbetningsmetod. Försök inte anropa System.Management.Automation.Cmdlet.ThrowTerminatingError* eller System.Management.Automation.Cmdlet.WriteError från en annan tråd. I stället måste fel kommuniceras tillbaka till huvudtråden.

Det är möjligt för en cmdlet att utlösa ett undantag i implementeringen av System.Management.Automation.Cmdlet.BeginProcessing, System.Management.Automation.Cmdlet.ProcessRecordeller System.Management.Automation.Cmdlet.EndProcessing-metoden. Alla undantag som utlöses från dessa metoder (förutom några allvarliga feltillstånd som stoppar Windows PowerShell-värden) tolkas som ett avslutande fel som stoppar pipelinen, men inte Windows PowerShell som helhet. (Detta gäller endast för huvud-cmdlet-tråden. Ohanterade undantag i trådar som genereras av cmdleten stoppar i allmänhet Windows PowerShell-värden.) Vi rekommenderar att du använder System.Management.Automation.Cmdlet.ThrowTerminatingError* i stället för att utlösa ett undantag eftersom felposten innehåller ytterligare information om feltillståndet, vilket är användbart för slutanvändaren. Cmdletar bör respektera riktlinjen för hanterad kod mot att fånga och hantera alla undantag (catch (Exception e)). Konvertera endast undantag av kända och förväntade typer till felposter.

Se även

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

Windows PowerShell-felposter

Skriva en Windows PowerShell-cmdlet