- 04/01/2019
- 6 minut, aby si
-
- c
KRÁTKÝ POPIS
Popisuje, jak použít Try
Catch
Finally
bloky handleterminating chyby.,
POPIS
Použití Try
Catch
Finally
bloky reagovat nebo zvládnout terminatingerrors ve skriptech. Příkaz Trap
lze také použít ke zpracování terminatingerrors ve skriptech. Pro více informací viz about_Trap.
ukončující chyba zastaví spuštění příkazu. Pokud PowerShell nějakým způsobem neruší ukončující chybu, PowerShell také zastaví spuštění funkce nebo skriptu pomocí aktuálního potrubí., V jiných jazycích, jako je C#,jsou terminační chyby označovány jako výjimky.
pomocí blokuTry
definujte část skriptu, ve které chcete sledovat chyby. Pokud dojde k chybě v blokuTry
, chyba se nejprve uloží do automatické proměnné $Error
. PowerShell thensearches proCatch
blok pro zpracování chyby., Pokud Try
prohlášení doesnot mít odpovídající Catch
blok, PowerShell i nadále hledat vhodnou Catch
blok Trap
prohlášení v mateřské obory. PoCatch
blok je ukončen, nebo pokud není vhodné Catch
blok Trap
prohlášení je zjištěno, Finally
blok je spuštěn. Pokud nelze chybu vyřešit, chyba je zapsána do proudu chyb.,
aCatch
blok může obsahovat příkazy pro sledování chyby nebo pro obnoveníočekávaný tok skriptu. Catch
blok může určit, které typy chyb chytí. Try
příkaz může obsahovat víceCatch
bloků pro různé chyby.
aFinally
blok lze použít k uvolnění všech zdrojů, které již nejsou potřebnés skriptem.,
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.,
následující příklad ukazuje Try
blok syntaxe:
try {<statement list>}
Try
klíčové slovo následuje výpis seznamu v závorkách. Pokud terminatingerror dochází při prohlášení v prohlášení seznamu jsou spustit, thescript prochází chybové objekt z Try
blok odpovídající Catch
blok.
v závorkách se zobrazí následující Catch
syntaxe bloku:
catch *] {<statement list>}
typy chyb., Nejvzdálenější závorky označují prvek jeoptimální.
Catch
klíčové slovo následuje nepovinný seznam chyb typespecifications a prohlášení seznam. Pokud dojde k chybě ukončení v blokuTry
, PowerShell vyhledá odpovídajícíCatch
blok. Ifone je nalezen, příkazy v bloku Catch
Jsou provedeny.
blokCatch
může určit jeden nebo více typů chyb. Typ chyby je Amicrosoft. NET Framework výjimka nebo výjimka, která je odvozena od .,Výjimka NETFramework. Catch
blok zpracovává chyby zadaného .Třída výjimek NETFramework nebo jakékoli třídy, která pochází z zadané třídy.
Pokud Catch
blok určuje typ chyby, že Catch
blok zpracovává thattype chyb. Pokud Catch
blok není určit typ chyby, která Catch
blok zpracovává nějaké chybě v Try
blok., Try
prohlášení caninclude více Catch
bloky pro různé uvedené typy chyb.
následující příklad ukazuje Finally
blok syntaxe:
finally {<statement list>}
Finally
klíčové slovo následuje výpis seznamu, který se spouští pokaždé, když thescript je běh, i když Try
prohlášení běžel bez chyby nebo chyby wascaught v Catch
prohlášení.
všimněte si, že stisknutí CTRL + C zastaví potrubí., Objekty, které jsou odeslány do potrubí, nebudou zobrazeny jako výstup. Proto, jestli obsahovat prohlášení, které mají být zobrazeny, jako je „Konečně blok má spustit“, neuvede zobrazí po stisknutí kláves CTRL+C, i kdyžFinally
blok běžel.
CHYTÁNÍ CHYB
následující ukázkový skript ukazuje Try
blok Catch
blok:
try { NonsenseString }catch { "An error occurred." }
Catch
klíčové slovo musí následovat bezprostředně po Try
blok Catch
blok.,
PowerShell nerozpozná „NonsenseString“ jako cmdlet nebo jinou položku.Spuštěním tohoto skriptu vrátí následující výsledek:
An error occurred.
Když skript narazí „NonsenseString“, způsobuje zastavení chyba. BlokCatch
zpracovává chybu spuštěním seznamu příkazů uvnitř bloku.
pomocí více výkazů úlovku
a Try
příkaz může mít libovolný početCatch
bloků., Například následující skript má Try
blok, že popularita MyDoc.doc
, a to containstwo Catch
bloky:
první Catch
blok zpracovává chyby na Systému.Net.WebException andSystem.IO.IOException typy. Druhý blok Catch
neuvádí Typ anerror. Druhý blok Catch
zpracovává další chyby, které končí.
PowerShell odpovídá typům chyb podle dědičnosti. Catch
blok zpracovává chyby zadaného .,Třída výjimek NET Framework nebo jakékoli třídy, která odvozujez uvedené třídy. Následující příklad obsahuje Catch
blok thatcatches „Příkaz Nebyl Nalezen“ chyba:
catch {"Inherited Exception" }
zadaný typ chyby, CommandNotFoundException, dědí z system.Typ systemexcepce. Následující příklad také úlovky CommandNot Nalezena chyba:
catch {"Base Exception" }
Catch
blok zpracovává „Příkaz Nebyl Nalezen“ chyby a další chyby thatinherit z SystemException typ.,
Pokud zadáte chybová třídy a jeden z jeho odvozených tříd, místo Catch
blok pro odvozené třídy před Catch
blok pro obecné třídy.
Pomocí Pastí v Try Catch
Při ukončení chyba se vyskytuje v Try
blok Trap
definované v Try
blok, i když tam je odpovídající Catch
blok, Trap
statementtakes kontrolu.,
Pokud Trap
existuje na vyšší blok Try
, a není tam žádný odpovídajícíCatch
blok v aktuálním rozsahu, Trap
bude mít kontrolu, i pokud rodič působnosti má odpovídající Catch
blok.
PŘÍSTUP VÝJIMKA INFORMACE
V Catch
blok, současný chyby mohou být přístupné pomocí $_
, který je také známý jako $PSItem
. Objekt je typu ErrorRecord.,
try { NonsenseString }catch { Write-Host "An error occurred:" Write-Host $_}
tento skript Spuštěn vrátí následující výsledek:
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.
k Dispozici jsou další vlastnosti, které mohou být přístupné, jako ScriptStackTrace,Výjimkou, a ErrorDetails. Například, pokud změníme scénář následující:
try { NonsenseString }catch { Write-Host "An error occurred:" Write-Host $_.ScriptStackTrace}
výsledek bude podobný:
An Error occurred:at <ScriptBlock>, <No file>: line 2
UVOLNĚNÍ ZDROJŮ POMOCÍ KONEČNĚ
volné zdroje používá skript, přidat Finally
blok po Try
Catch
bloky., Finally
příkazy bloku běží bez ohledu na to, zda blokTry
narazí na ukončující chybu. PowerShell spustíFinally
blokpřed ukončením skriptu nebo před ukončením aktuálního bloku.
aFinally
blok běží i při použití CTRL + C k zastavení zápisu. Blok Finally
také běží, pokud Klíčové slovo Exit zastaví skript fromwithinCatch
blok.,
VIZ TAKÉ
about_Break
about_Continue
about_Scopes
about_Throw
about_Trap
Napsat komentář