• 04/01/2019
  • 6 perc olvasni
    • S
    • s
    • c

RÖVID LEÍRÁS

Ismerteti, hogyan kell használni a Try, Catch vagy Finally blokkokat, hogy handleterminating hibák.,

hosszú leírás

Use Try, Catchés Finally blocks to response to or handle terminatingerrors in scripts. ATrap utasítás használható a terminatingerrors szkriptekben történő kezelésére is. További információ: about_Trap.

a záró hiba leállítja a nyilatkozat futtatását. Ha a PowerShell valamilyen módon nem oldja meg a megszüntetési hibát, akkor a PowerShell leállítja a funkció vagy a szkript futtatását az aktuális csővezeték használatával., Más nyelveken, mint például a C#,a megszüntetési hibákat kivételnek nevezik.

használja a Try blokkot a szkript egy olyan szakaszának meghatározásához, amelyben a wantpowershell a hibák megfigyelésére szolgál. Ha a Try blokkon belül hiba lép fel, a hibát először a $Error automatikus változóra menti. PowerShell thensearches for a Catch block to handle the error., Ha aTry utasítás nem rendelkezik megfelelőCatch blokk, PowerShell továbbra is keresni megfelelőCatch blokk vagyTrap nyilatkozat a szülő hatókörökben. Miután aCatch blokk befejeződött, vagy ha nincs megfelelőCatch blokk vagyTrapnyilatkozat található, aFinally blokk fut. Ha a hibát nem lehet kezelni,a hiba a hibafolyamba kerül.,

aCatch blokk tartalmazhat parancsokat a hiba nyomon követésére vagy helyreállításáraa szkript várható áramlása. ACatch blokk meghatározhatja, hogy mely hibatípusokfogások. ATry utasítás tartalmazhat több Catch blokkokat különböző hibák esetén.

a Finally blokk használható olyan erőforrások felszabadítására, amelyekre már nincs szükséga szkriptben.,

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

az alábbiakban aTry blokk szintaxis:

try {<statement list>}

aTry kulcsszót egy zárójelben szereplő utasításlista követi. Ha egy terminatingerror akkor fordul elő, amikor a kijelentések listája fut, thescript átmegy a hiba objektum a Tryblokk egy megfelelő Catch blokk.

a következőkben aCatch blokk szintaxis:

catch *] {<statement list>}

hibatípusok zárójelben jelennek meg., A legkülső konzolok jelzik az elemetopcionális.

a Catch kulcsszót a hibatípusokra vonatkozó opcionális lista és egy utasításlista követi. Ha aTry blokkban záró hiba lép fel, a PowerShell megfelelő Catch blokkot keres. Ha az egyik megtalálható, a Catch blokk utasításai végrehajtásra kerülnek.

aCatch blokk megadhat egy vagy több hibatípust. Egy hiba típus aMicrosoft. NET Framework kivétel vagy egy kivétel, amely származik a .,NETFramework kivétel. ACatch blokk kezeli a megadott hibákat .NETFramework kivétel osztály vagy bármely osztály, amely a specifikáltosztályból származik.

Ha aCatch blokk egy hibatípust határoz meg, akkor aCatch blokk kezeli a hiba típusát. Ha aCatch blokk nem ad meg hibatípust, akkor aCatchblokk kezeli aTry blokkban előforduló hibákat., ATry nyilatkozat caninclude multiple Catch blocks for the different specified error types.

az alábbiakban a Finally blokk szintaxis:

finally {<statement list>}

a Finally kulcsszót egy utasításlista követi, amely minden alkalommal fut, amikor a Try utasítás futott hiba nélkül, vagy egy hiba wascaught egy Catch utasítás.

vegye figyelembe, hogy a CTRL+C gomb megnyomása leállítja a csővezetéket., A csővezetékbe küldött objektumok nem jelennek meg kimenetként. Ezért ha tartalmaz Egy megjelenítendő nyilatkozatot, például a “végül blokk futott”, akkornem jelenik meg a CTRL+C megnyomása után, még akkor sem, ha aFinally blokk futott.

CATCHING ERRORS

a következő minta script mutatja a Try blokk a Catch blokk:

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

a Catch kulcsszó azonnal követnie kell a Try blokkot vagy egy másik Catchblokkot.,

a PowerShell nem ismeri fel a “NonsenseString” – et cmdletként vagy más elemként.A parancsfájl futtatása a következő eredményt adja vissza:

An error occurred.

amikor a szkript “NonsenseString” – el találkozik, megszüntetési hibát okoz. ACatch blokk úgy kezeli a hibát, hogy futtatja a blokkon belüli utasításlistát.

több fogási nyilatkozat használata

a Try nyilatkozat lehet tetszőleges számú Catch blokkok., Például, thefollowing script van egy Try blokk, amely letölti , és tartalmaztwo Catch blokkok:

az elsőCatch blokk kezeli a rendszer hibáit.Net.webexception andsystem.Io.IOException típusok. A másodikCatch blokk nem adja meg az anerror típusát. A másodikCatch blokk minden más megszüntető hibát kezel.

PowerShell megegyezik hiba típusok öröklés. ACatch blokk kezeli errorsof a megadott .,NET Framework kivétel osztály vagy bármely osztály, amely származika megadott osztályból. A következő példa egy Catch blokkot tartalmaz, amely egy “nem található parancs” hibát jelez:

catch {"Inherited Exception" }

a megadott hibatípus, a CommandNotFoundException örökli a rendszerből.SystemException típus. A következő példa is elkapja a Parancsnem talált hiba:

catch {"Base Exception" }

Ez a Catch blokk kezeli a “Command not Found” hiba és egyéb hibák, hogyinherit a SystemException típus.,

ha hibaosztályt és annak egyik származtatott osztályát adja meg, helyezze aCatchblokkot a származtatott osztályra aCatch blokk előtt az Általános osztályhoz.

csapdák használata egy Próbafogásban

amikor egyTry blokk egyTrap meghatározott withintheTry blokk, még akkor is, ha van egy megfelelőCatch block, theTrap statementtakes control.,

Ha a Trap magasabb blokkban létezik, mint a Try, és nincs megfelelőCatch blokk az aktuális hatókörön belül, akkor a Trap átveszi az irányítást, még akkor is, ha bármelyik szülő scope van egy megfelelő Catch blokk.

KIVÉTELINFORMÁCIÓK elérése

egy Catch blokkon belül az aktuális hiba a $_ használatával érhető el, amely más néven $PSItem. Az objektum ErrorRecord típusú.,

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

A szkript futtatása a következő eredményt adja vissza:

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.

további tulajdonságok érhetők el, például ScriptStackTrace,Exception, and ErrorDetails. Például, ha a szkriptet a következőre változtatjuk:

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

az eredmény hasonló lesz:

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

erőforrások felszabadítása a szkript által használt szabad erőforrásokhoz, adjon hozzá egyFinallyblokk a Try és Catch blokkok után., AFinally blokk nyilatkozatok fut függetlenül attól, hogy aTry blokk találkozik egy záró hiba. PowerShell fut a Finally blokkmielőtt a szkript megszűnik, vagy mielőtt az aktuális blokk kialszik a hatókörből.

a Finally a blokk akkor is fut, ha a CTRL+C billentyűkombinációt használja a parancs leállításához. AFinally blokk akkor is fut, ha egy kilépési kulcsszó leállítja a szkriptetwithin aCatch blokk.,

Lásd még:

about_Break

about_Continue

about_Scopes

about_Throw

about_Trap