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 beskriver 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 det avslutande felet. Mer information om felposter finns i Windows PowerShell felposter.

När metoden System.Management.Automation.Cmdlet.Throwterminatingerror* anropas stoppar Windows PowerShell-körningen körningen permanent körningen av pipelinen och kastar 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 orsakar ett system.Management.Automation.Pipelinestoppedexception-undantag.

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

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

Cmdlets kan bara anropa System.Management.Automation.Cmdlet.Throwterminatingerror* från tråden som kallas System.Management.Automation.Cmdlet.BeginProcessing, System.Management.Automation.Cmdlet.ProcessRecordeller System.Management.Automation.Cmdlet.EndProcessing-indatabearbetningsmetoden. 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 felen förmedlas tillbaka till huvudtråden.

Det är möjligt för en cmdlet att skapa ett undantag i implementeringen av metoden System.Management.Automation.Cmdlet.BeginProcessing, System.Management.Automation.Cmdlet.ProcessRecordeller System.Management.Automation.Cmdlet.EndProcessing. Alla undantag som utlösts 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. Undantag utan fel i trådar som skapas 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. Cmdlets bör respektera riktlinjerna 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