Fouten waarbij de functie of bewerking wordt beëindigd

In dit onderwerp wordt de methode besproken die wordt gebruikt om beëindigingsfouten te rapporteren. Ook wordt besproken hoe u de methode aanroept vanuit de cmdlet en worden de uitzonderingen besproken die door de Windows PowerShell-runtime kunnen worden geretourneerd wanneer de methode wordt aangeroepen.

Wanneer er een beëindigingsfout 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 dat de voorwaarde beschrijft die de beëindigingsfout heeft veroorzaakt. Zie foutrecords voor meer informatie Windows PowerShell foutrecords.

Wanneer de methode System.Management.Automation.Cmdlet.Throwterminatingerror* wordt aangeroepen, stopt de Windows PowerShell-runtime de uitvoering van de pijplijn permanent en wordt een Uitzondering System.Management.Automation.Pipelinestoppedexception uitgevoerd. Alle volgende pogingen om System.Management.Automation.Cmdlet.WriteObject, System.Management.Automation.Cmdlet.WriteErrorof verschillende andere API's aan te roepen, zorgen ervoor dat deze aanroepen een System.Management.Automation.Pipelinestoppedexception-uitzondering veroorzaken.

De uitzondering System.Management.Automation.Pipelinestoppedexception kan ook optreden als een andere cmdlet in de pijplijn een beëindigingsfout rapporteert, als de gebruiker heeft gevraagd om de pijplijn te stoppen of als de pijplijn om een bepaalde reden is gestopt vóór voltooiing. De cmdlet hoeft de uitzondering System.Management.Automation.Pipelinestoppedexception niet te ondervangen, tenzij open resources of de interne status moeten worden opsschoond.

Cmdlets kunnen een groot aantal uitvoerobjecten of niet-beëindigingsfouten schrijven voordat een beëindigingsfout wordt gemeld. De beëindigingsfout stopt de pijplijn echter permanent en er kan geen verdere uitvoer, beëindigingsfouten of niet-beëindigingsfouten 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 de invoerverwerkingsmethode System.Management.Automation.Cmdlet.EndProcessing. Probeer System.Management.Automation.Cmdlet.Throwterminatingerror* of System.Management.Automation.Cmdlet.WriteError niet aan te roepen vanuit een andere thread. In plaats daarvan moeten fouten worden gecommuniceerd naar de hoofdthread.

Een cmdlet kan een uitzondering in de implementatie van de system.Management.Automation.Cmdlet.BeginProcessing, System.Management.Automation.Cmdlet.ProcessRecordof de methode System.Management.Automation.Cmdlet.EndProcessing geven. Elke uitzondering die wordt veroorzaakt door deze methoden (met uitzondering van enkele ernstige foutsituaties die de Windows PowerShell-host stoppen) wordt geïnterpreteerd als een beëindigingsfout die de pijplijn stopt, maar niet Windows PowerShell als geheel. (Dit geldt alleen voor de hoofd-cmdlet-thread. Niet-beladen uitzonderingen in threads die zijn voortgebracht door de cmdlet, stoppen in het algemeen de Windows PowerShell host.) U wordt aangeraden System.Management.Automation.Cmdlet.Throwterminatingerror* te gebruiken in plaats van een uitzondering te geven, omdat de foutrecord aanvullende informatie biedt over de foutvoorwaarde, wat nuttig is voor de eindgebruiker. Cmdlets moeten de richtlijnen voor beheerde code volgen om alle uitzonderingen op te vangen en af te handelen ( catch (Exception e) ). Alleen uitzonderingen van bekende en verwachte typen converteren 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

Windows PowerShell-foutrecords

Een Windows PowerShell-cmdlet schrijven