- 04/01/2019
- 6 minuter att läsa
-
- s
- s
- c
kort beskrivning
beskriver hur du använder Try
, Catch
och Finally
block för att handleterminera fel.,
lång beskrivning
användTry
,Catch
ochFinally
block för att svara på eller hantera termineringfel i skript. Trap
– satsen kan också användas för att hantera terminatingerrors i skript. För mer information, se about_Trap.
ett avslutande fel hindrar ett uttalande från att köras. Om PowerShell intehanterar ett avslutande fel på något sätt slutar PowerShell också att köra funktionen eller skriptet med den aktuella rörledningen., På andra språk, som C#,kallas avslutande fel undantag.
användTry
blocket för att definiera en del av ett skript där du vill ha PowerShell att övervaka för fel. När ett fel uppstår i Try
– blocket sparas felet först i den automatiska variabeln $Error
. PowerShell thensearches efter Catch
block för att hantera fel., OmTry
– satsen inte har en matchandeCatch
– block, fortsätter PowerShell att söka efter anlämpligtCatch
– block ellerTrap
– sats i överordnade omfattningar. Efter att ettCatch
– block har slutförts eller om inget lämpligt Catch
– block eller Trap
– satsen hittas körs blocket Finally
. Om felet inte kan hanteras skrivs felet till felströmmen.,
aCatch
block kan innehålla kommandon för att spåra felet eller för att återställaDet förväntade flödet av skriptet. ACatch
– blocket kan ange vilka feltypsitfångster. ATry
– satsen kan innehålla fleraCatch
– block för olika feltyper.
aFinally
block kan användas för att frigöra resurser som inte längre behövsav ditt skript.,
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.,
följande visarTry
block syntax:
try {<statement list>}
Try
nyckelordet följs av en uttalande lista i hängslen. Om en terminatingerror inträffar medan uttalandena i statellistan körs, skickar thescript felobjektet från blocketTry
till ett lämpligt blockCatch
.
följande visarCatch
block syntax:
catch *] {<statement list>}
feltyper visas inom parentes., De yttersta konsolerna anger elementet ärval.
nyckelordetCatch
följs av en valfri lista med feltypspecifikationer och en statellista. Om ett avslutande fel inträffar iTry
– blocket söker PowerShell efter ett lämpligt Catch
– block. Ifone hittas körs uttalandena iCatch
– blocket.
Catch
– blocket kan ange en eller flera feltyper. En feltyp är amicrosoft. Net Framework undantag eller ett undantag som härrör från en .,NETFramework undantag. ACatch
block hanterar fel i det angivna .NETFramework undantagsklass eller av någon klass som härrör från den angivnaklassen.
om ettCatch
– block anger en feltyp, hanterarCatch
– blocket dentyp av fel. Om ettCatch
– block inte anger en feltyp, hanterarCatch
– blocket eventuella fel som uppstått iTry
– blocket., ATry
uttalande caninclude multipleCatch
block för de olika angivna feltyperna.
följande visarFinally
block syntax:
finally {<statement list>}
Finally
nyckelordet följs av en uttalande lista som körs varje gång thescript körs, även omTry
uttalande sprang utan fel eller ett fel wascaught i enCatch
uttalande.
Observera att genom att trycka på CTRL+C stoppas rörledningen., Mål som skickas till rörledningen kommer inte att visas som utgång. Därför, omdu inkluderar ett uttalande som ska visas, till exempel ”äntligen block har körts”, detkommer inte att visas när du trycker på CTRL+C, även omFinally
– blocket sprang.
fånga fel
följande exempelskript visar ettTry
block med ettCatch
block:
try { NonsenseString }catch { "An error occurred." }
Catch
nyckelordet måste omedelbart följaTry
Catch
> blockera eller annan Catch
block.,
PowerShell känner inte igen ”NonsenseString” som en cmdlet eller annat objekt.Att köra det här skriptet returnerar följande resultat:
An error occurred.
När skriptet stöter på ”NonsenseString” orsakar det ett avslutande fel. Catch
– blocket hanterar felet genom att köra statellistan inuti blocket.
använda flera fångstdeklarationer
aTry
uttalande kan ha valfritt antalCatch
block., Till exempel har thefollowing script ett Try
blockera som hämtar MyDoc.doc
, och det innehållertwo Catch
block:
det första Catch
blocket hanterar fel i System.Net.WebException andSystem.Io.IOException typer. Det andra Catch
– blocket anger inte anerror-typ. Det andra Catch
– blocket hanterar alla andra avslutande fel somförekommer.
PowerShell matchar feltyper genom arv. ACatch
block hanterar felav det angivna .,Undantagsklassen NET Framework eller någon klass som härledsfrån den angivna klassen. Följande exempel innehåller ett Catch
blockera thatcatches a ”Command Not Found” fel:
catch {"Inherited Exception" }
den angivna feltypen, CommandNotFoundException, ärver frånsystemet.SystemException typ. Följande exempel fångar också ett Kommandointe hittat fel:
catch {"Base Exception" }
det här Catch
– blocket hanterar felet ”Command Not Found” och andra fel sominherit från SystemException-typen.,
om du anger en felklass och en av dess härledda klasser placerar du blocketCatch
för den härledda klassen före blocketCatch
för den allmänna klassen.
använda fällor i en Försöksfångst
När ett avslutande fel inträffar i ett Try
block med ett Trap
definierat withinthe Try
block, även om det finns ett matchande Catch
block, Trap
Statementtakes kontroll.,
om ettTrap
finns vid ett högre block änTry
, och det finns ingen matchningCatch
block inom det aktuella området, kommerTrap
att ta kontroll, även omvilken överordnad omfattning som helst har en matchande Catch
block.
åtkomst till UNDANTAGSINFORMATION
inom ettCatch
– block kan det aktuella felet nås med$_
, vilketär också känt som$PSItem
. Objektet är av typen ErrorRecord.,
try { NonsenseString }catch { Write-Host "An error occurred:" Write-Host $_}
genom att köra det här skriptet returneras följande resultat:
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.
det finns ytterligare egenskaper som kan nås, till exempel ScriptStackTrace,Exception och ErrorDetails. Om vi till exempel ändrar skriptet tillföljande:
try { NonsenseString }catch { Write-Host "An error occurred:" Write-Host $_.ScriptStackTrace}
resultatet kommer att likna:
An Error occurred:at <ScriptBlock>, <No file>: line 2
frigöra resurser genom att använda slutligen
för att frigöra resurser som används av ett skript, Lägg till ett Finally
block efter Try
ochCatch
block., BlocketFinally
körs oavsett omTry
– blocket stöter på ett avslutande fel. PowerShell körFinally
block innan skriptet avslutas eller innan det aktuella blocket går utanför tillämpningsområdet.
aFinally
block körs även om du använder CTRL+C för att stoppa skriptet. AFinally
block körs även om ett Exit-nyckelord stoppar scriptet fromwithin aCatch
block.,
se även
about_Break
about_Continue
about_Scopes
about_Throw
about_Trap
Lämna ett svar