• 04/01/2019
  • 6 minuten te lezen
    • S
    • s
    • c

een KORTE BESCHRIJVING

Beschrijft hoe het gebruik van de Try, Catch, en Finally blokken te handleterminating fouten.,

lange beschrijving

gebruik Try, Catch, en Finally blokken om te reageren op of af te handelen naar terminatiefouten in scripts. HetTrap statement kan ook worden gebruikt om terminatorrors in scripts af te handelen. Zie about_Trap voor meer informatie.

een afsluitfout stopt het uitvoeren van een statement. Als PowerShell op een of andere manier geen beëindigingsfout behandelt, stopt PowerShell ook met het uitvoeren van de functie of het script met behulp van de huidige pijplijn., In andere talen, zoals C#,worden beëindigingsfouten aangeduid als uitzonderingen.

gebruik het Try blok om een sectie van een script te definiëren waarin u PowerShell wilt controleren op fouten. Wanneer er een fout optreedt binnen hetTry blok,wordt de fout eerst opgeslagen in de$Error automatische variabele. PowerShell zoekt dan naar een Catch blok om de fout af te handelen., Als hetTry statement geen overeenkomendeCatch block heeft, blijft PowerShell zoeken naar een passendCatch block ofTrap statement in de bovenliggende scopes. Nadat eenCatch blok is voltooid of indien geen geschiktCatch blok ofTrapstatement is gevonden, wordt hetFinally blok uitgevoerd. Als de fout niet kan worden verwerkt,wordt de fout naar de foutenstream geschreven.,

a Catch block kan commando ‘ s bevatten voor het volgen van de fout of voor het herstellen van de verwachte flow van het script. Een Catch blok kan aangeven welke fouttypesit vangt. EenTry statement kan meerdereCatch blokken bevatten voor verschillende fouten.

a Finally block kan worden gebruikt om alle bronnen vrij te maken die niet langer nodig zijn door uw script.,

Try, Catch, and Finally resemble the Try, Catch, and Finallykeywords used in the C# programming language.

SYNTAX

A Try statement contains a Try block, zero or more Catch blocks, and zeroor one Finally block. A Try statement must have at least one Catch blockor one Finally block.,

het volgende toont de Try blok syntaxis:

try {<statement list>}

het Try sleutelwoord wordt gevolgd door een statement lijst in accolades. Als er een terminatorfout optreedt terwijl de statements in de statementslijst worden uitgevoerd, geeft thescript het foutobject door van het Try blok naar een toepasselijk Catchblok.

het volgende toont de Catch blok syntaxis:

catch *] {<statement list>}

fouttypen staan tussen haakjes., De buitenste haakjes geven het element isoptioneel aan.

het Catch sleutelwoord wordt gevolgd door een optionele lijst met fouttypespecificaties en een statement list. Als er een afsluitfout optreedt in hetTry blok, zoekt PowerShell naar een geschikt Catch blok. Als er een gevonden wordt, worden de statements in het Catch blok uitgevoerd.

hetCatch blok kan een of meer fouttypen opgeven. Een fouttype is amicrosoft. NET Framework uitzondering of een uitzondering die is afgeleid van een .,NETFramework uitzondering. A Catch blok behandelt fouten van de opgegeven.NetFramework exception class of van een klasse die voortkomt uit de opgegeven class.

als een Catch blok een fouttype specificeert, dan behandelt Catch blok dit type fout. Als een Catch blok geen fouttype specificeert, behandelt dat Catchblok elke fout die wordt aangetroffen in het Try blok., EenTry statement kan meerdereCatch blokken bevatten voor de verschillende gespecificeerde fouttypen.

het volgende laat Het Finally blok syntax:

finally {<statement list>}

De Finally trefwoord wordt gevolgd door een verklaring lijst die wordt uitgevoerd elke keer thescript wordt uitgevoerd, zelfs als de Try instructie liep zonder fout of een fout wascaught in een Catch – instructie.

merk op dat het indrukken van CTRL + C de pijplijn stopt., Objecten die naar de pijplijn worden verzonden, worden niet als uitvoer weergegeven. Als u daarom een statement toevoegt dat moet worden weergegeven, zoals “Finally block has run”, zal het niet worden weergegeven nadat u op CTRL+C hebt gedrukt, zelfs als hetFinally blok liep.

fouten opvangen

het volgende voorbeeld script toont een Try blok met een Catch blok:

try { NonsenseString }catch { "An error occurred." }

het Catch div id=”b28fac9c89″> blok of een anderCatchblok.,

PowerShell herkent “NonsenseString” niet als een cmdlet of ander item.Het uitvoeren van dit script geeft het volgende resultaat:

An error occurred.

wanneer het script “NonsenseString” tegenkomt, veroorzaakt het een beëindigingsfout. HetCatch blok verwerkt de fout door de statement list binnen het blok uit te voeren.

gebruikmakend van meerdere vangstaangiften

A Try kan een willekeurig aantal blokken Catch bevatten., Het volgende script heeft bijvoorbeeld een Try blok dat MyDoc.doc downloadt, en het bevat twee Catch blokken:

de eerste Catch blok behandelt fouten van het systeem.Net.WebException andsystem.Io.IOException types. Het tweede blok Catch specificeert geen fouttype. Het tweedeCatch blok behandelt alle andere afsluitfouten die zich voordoen.

PowerShell komt overeen met fouttypen door overerving. A Catch blok behandelt fouten van de opgegeven.,NET Framework exception class of van een klasse die is afgeleid van de gespecificeerde klasse. Het volgende voorbeeld bevat een Catch blok dat een” Command Not Found”fout koppelt:

catch {"Inherited Exception" }

het opgegeven fouttype, CommandNotFoundException, erft van het systeem.Type systeemexceptie. Het volgende voorbeeld vangt ook een Opdrachtniet gevonden fout:

catch {"Base Exception" }

Dit Catch blok behandelt de “opdracht niet gevonden” fout en andere fouten die inherit van het Systeemexception type.,

Als u een foutklasse en een van de afgeleide klassen specificeert, plaatst u hetCatchblok voor de afgeleide klasse vóór hetCatch blok voor de algemene klasse.

met Behulp van Vallen in een Try Catch

Wanneer een beëindiging van de fout optreedt in een Try – blok met een Trap gedefinieerd binnen Try blokkeren, zelfs als er een overeenkomende Catch – blok, de Trap statementtakes controle.,

als een Trap bestaat op een hoger blok dan het Try, en er geen overeenkomendeCatch blok binnen de huidige scope is, zal de Trap de controle overnemen, zelfs als een ouderscope een overeenkomende Catch blok.

toegang tot UITZONDERINGSINFORMATIE

binnen een Catch blok, kan de huidige fout worden benaderd met $_, die ook bekend staat als $PSItem. Het object is van het type ErrorRecord.,

try { NonsenseString }catch { Write-Host "An error occurred:" Write-Host $_}

het uitvoeren van dit script geeft het volgende resultaat:

An Error occurred:The term 'NonsenseString' is not recognized as the name of a cmdlet, function,script file, or operable program. Check the spelling of the name, or if a pathwas included, verify that the path is correct and try again.

Er zijn extra eigenschappen die kunnen worden benaderd, zoals ScriptStackTrace,Exception, en ErrorDetails. Bijvoorbeeld, als we het script veranderen in het volgende:

try { NonsenseString }catch { Write-Host "An error occurred:" Write-Host $_.ScriptStackTrace}

het resultaat zal vergelijkbaar zijn met:

An Error occurred:at <ScriptBlock>, <No file>: line 2

het vrijmaken van bronnen Door uiteindelijk

te gebruiken om bronnen vrij te maken die door een script worden gebruikt, voeg een Finally blok toe na de Try enCatch blokken., DeFinally blok statements draaien ongeacht of deTry blok een afsluitfout tegenkomt. PowerShell draait deFinally Block voordat het script wordt beëindigd of voordat het huidige blok buiten bereik komt.

a Finally blok draait zelfs als u CTRL+C gebruikt om het script te stoppen. Een Finally blok wordt ook uitgevoerd als een Exit sleutelwoord het script stopt met een Catch blok.,

zie ook

about_Break

about_Continue

about_Scopes

about_trow

about_Trap