- 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 ofTrap
statement 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 Finally
keywords 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 Catch
blok.
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 Catch
blok 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 anderCatch
blok.,
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 hetCatch
blok 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
Geef een reactie