• 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 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.,

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 blocketCatchfö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