• 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 Trapprohláš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 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.,

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í Catchblok.

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

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 Catchblok 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 TryCatch 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