- 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 vagyTrap
nyilatkozat 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 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.,
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 Try
blokk 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 aCatch
blokk 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 Catch
blokkot.,
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 aCatch
blokkot 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á egyFinally
blokk 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
Vélemény, hozzászólás?