Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit onderwerp wordt de methode besproken die wordt gebruikt voor het melden van afsluitfouten. Ook wordt besproken hoe u de methode aanroept vanuit de cmdlet en wordt besproken welke uitzonderingen kunnen worden geretourneerd door de Windows PowerShell-runtime wanneer de methode wordt aangeroepen.
Wanneer er een afsluitfout optreedt, moet de cmdlet de fout melden door de methode System.Management.Automation.Cmdlet.ThrowTerminatingError* aan te roepen. Met deze methode kan de cmdlet een foutrecord verzenden die de voorwaarde beschrijft die de afsluitfout heeft veroorzaakt. Zie Windows PowerShell-foutrecordsvoor meer informatie over foutrecords.
Wanneer de methode System.Management.Automation.Cmdlet.ThrowTerminatingError* wordt aangeroepen, stopt de Windows PowerShell-runtime de uitvoering van de pijplijn definitief en genereert de System.Management.Automation.PipelineStoppedException uitzondering. Eventuele volgende pogingen om System.Management.Automation.Cmdlet.WriteObject, System.Management.Automation.Cmdlet.WriteErroraan te roepen, of verschillende andere API's veroorzaken een System.Management.Automation.PipelineStoppedException uitzondering.
De System.Management.Automation.PipelineStoppedException uitzondering kan ook optreden als een andere cmdlet in de pijplijn een afsluitfout rapporteert, als de gebruiker heeft gevraagd om de pijplijn te stoppen of als de pijplijn om welke reden dan ook is gestopt. De cmdlet hoeft de System.Management.Automation.PipelineStoppedException uitzondering niet te ondervangen, tenzij deze open resources of de interne status ervan moet opschonen.
Cmdlets kunnen een willekeurig aantal uitvoerobjecten of niet-afsluitfouten schrijven voordat er een afsluitfout wordt gerapporteerd. De afsluitfout stopt de pijplijn echter definitief en er kunnen geen verdere uitvoer-, afsluitfouten of niet-afsluitfouten worden gerapporteerd.
Cmdlets kunnen System.Management.Automation.Cmdlet.ThrowTerminatingError* alleen aanroepen vanuit de thread met de naam System.Management.Automation.Cmdlet.BeginProcessing, System.Management.Automation.Cmdlet.ProcessRecordof System.Management.Automation.Cmdlet.EndProcessing invoerverwerkingsmethode. Probeer geen System.Management.Automation.Cmdlet.ThrowTerminatingError* of System.Management.Automation.Cmdlet.WriteErr or aan te roepen vanuit een andere thread. In plaats daarvan moeten fouten worden teruggestuurd naar de hoofdthread.
Het is mogelijk dat een cmdlet een uitzondering genereert bij de implementatie van de System.Management.Automation.Cmdlet.BeginProcessing, System.Management.Automation.Cmdlet.ProcessRecordof System.Management.Automation.Cmdlet.EndProcessing methode. Elke uitzondering die wordt gegenereerd op basis van deze methoden (met uitzondering van enkele ernstige foutvoorwaarden die de Windows PowerShell-host stoppen) wordt geïnterpreteerd als een afsluitfout die de pijplijn stopt, maar niet als geheel Windows PowerShell. (Dit geldt alleen voor de hoofd-cmdlet-thread. Niet-onderschepde uitzonderingen in threads die door de cmdlet zijn over het algemeen, stoppen de Windows PowerShell-host.) U wordt aangeraden System.Management.Automation.Cmdlet.ThrowTerminatingError* te gebruiken in plaats van een uitzondering te genereren, omdat de foutrecord aanvullende informatie biedt over de foutvoorwaarde, wat nuttig is voor de eindgebruiker. Cmdlets moeten de richtlijn voor beheerde code respecteren voor het vangen en verwerken van alle uitzonderingen (catch (Exception e)). Converteer alleen uitzonderingen van bekende en verwachte typen naar foutrecords.
Zie ook
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