• 04/01/2019
  • 6 minute pentru a citi
    • S
    • s
    • c

o SCURTĂ DESCRIERE

Descrie cum să utilizați Try, Catch și Finally blocuri pentru a handleterminating erori.,

DESCRIERE

Utilizare Try, Catch și Finally blocuri să răspundă sau să se ocupe de terminatingerrors în scripturi. Declarația Trap poate fi, de asemenea, utilizată pentru a gestiona terminatingerrors în scripturi. Pentru mai multe informații, consultați about_Trap.

o eroare de terminare oprește rularea unei instrucțiuni. Dacă PowerShell nu manipulează o eroare de terminare într-un fel, PowerShell oprește, de asemenea, rularea funcției sau scriptului folosind conducta curentă., În alte limbi, cum ar fi C#,erorile de terminare sunt denumite excepții.

utilizați bloculTry pentru a defini o secțiune a unui script în care dorițipowershell să monitorizeze Erorile. Când apare o eroare în blocul Try, eroarea este salvată mai întâi în variabila automată $Error. PowerShell thensearches pentru un Catch bloc pentru a gestiona eroarea., Dacă Try declarație doesnot au o potrivire Catch bloc, PowerShell continuă pentru a căuta manuală Catch bloc sau Trap declarație în părinte domenii. După unCatch blocul este finalizat sau dacă nu este cazul Catch bloc sau Trapdeclarație este găsit, Finally bloc este fug. Dacă eroarea nu poate fi gestionată,eroarea este scrisă în fluxul de eroare.,

a Catch block poate include comenzi pentru urmărirea erorii sau pentru recuperarefluxul așteptat al scriptului. Un Catch bloc poate specifica ce eroare typesit capturile. Un Try declarație poate include mai multe Catch blocuri pentru tipuri diferite de erori.

a Finally block poate fi folosit pentru a elibera orice resurse care nu mai sunt necesarede script-ul.,

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

continuare Try bloc sintaxa:

try {<statement list>}

Try cuvânt cheie este urmată de o declarație listă în bretele. Dacă un terminatingerror apare în timp ce declarațiile în declarația listă sunt în curs de a alerga, thescript trece de eroare obiect de Try bloc a unui caz Catchbloc.

continuare Catch bloc sintaxa:

catch *] {<statement list>}

tipuri de Erori apar în paranteze., Parantezele exterioare indică elementul esteopțional.

Catch cuvântul cheie este urmat de o listă opțională de erori typespecifications și o listă declarație. Dacă apare o eroare de terminare în bloculTry, PowerShell caută un bloc Catch corespunzător. Dacă se găsește una, declarațiile din blocul Catch sunt executate.

blocul Catch poate specifica unul sau mai multe tipuri de erori. Un tip de eroare este amicrosoft. NET Framework excepție sau o excepție care este derivată dintr-un .,NETFramework excepție. Un Catch bloc se ocupă de erorile specificate .NETFramework clasa excepție sau de orice clasă care derivă din specificedclass.

Dacă un Catch bloc specifică unui tip de eroare, care Catch bloc se ocupă de thattype de eroare. Dacă un Catch bloc nu specifica un tip de eroare, care Catchbloc se ocupă de orice eroare întâlnită în Try bloc., Un Try declarație caninclude multiple Catch blocuri pentru diferite specificate tipurile de erori.

continuare Finally bloc sintaxa:

finally {<statement list>}

Finally cuvânt cheie este urmată de o declarație cu lista pe care se execută de fiecare dată când thescript este rulat, chiar dacă Try declarație a fugit fără eroare sau o eroare wascaught într-un Catch declarație.

rețineți că apăsarea CTRL+C oprește conducta., Obiecte care sunt trimise la conducta nu vor fi afișate ca ieșire. Prin urmare, dacă să includă o declarație pentru a fi afișate, cum ar fi „în cele din Urmă bloc a alerga”, va fi afișat după ce apăsați CTRL+C, chiar dacăFinally bloc a fugit.

PRINDEREA ERORILOR

următorul exemplu De script-ul arată o Try bloc cu un Catch bloc:

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

Catch cheie trebuie să urmeze imediat Try bloc sau un alt Catchbloc.,PowerShell nu recunoaște „NonsenseString” ca un cmdlet sau alt element.Rularea acestui script returnează următorul rezultat:

An error occurred.

când scriptul întâlnește „NonsenseString”, provoacă o eroare de terminare. BloculCatch gestionează eroarea rulând lista de instrucțiuni din interiorul blocului.

FOLOSIND mai MULTE DECLARAȚIILOR de CAPTURĂ

Try declarație poate avea orice număr de Catch blocuri., De exemplu, următoarele script-ul are un Try bloc care descarcă MyDoc.doc, și containstwo Catch blocuri:

prima Catch bloc se ocupă de erori de Sistem.Net.WebException si sistempentru.IO.IOException tipuri. Al doilea Catch Bloc nu specifică tipul anerror. Al doilea Catch bloc se ocupă de orice alte erori de terminare careapar.PowerShell se potrivește cu tipurile de erori prin moștenire. Un Catch bloc se ocupă de errorsof specificate .,NET Framework exception class sau din orice clasă care derivădin clasa specificată. Exemplul următor conține un Catch bloc thatcatches o „Comanda Nu a fost Găsit” eroare:

catch {"Inherited Exception" }

specificat tip de eroare, CommandNotFoundException, moștenește de theSystem.Tipul SystemException. Următorul exemplu, de asemenea, prinde o CommandNot a fost Găsit de eroare:

catch {"Base Exception" }

Catch bloc se ocupă de „Comanda Nu a fost Găsit” eroare și alte erori thatinherit din SystemException tip.,

Dacă specificați o eroare de clasă și una din clasele derivate, loc Catchbloc pentru clasa derivată înainte Catch bloc de clasă generală.

Folosind Capcane într-o încercare de a Prinde

atunci Când o încheiere de eroare apare într-un Try bloc cu un Trap definite în cadrul Try bloc, chiar dacă există o potrivire Catch bloc, Trap statementtakes de control.,

Dacă un Trap există într-o mai mare bloc decât Try, și nu există nici o potrivireCatch bloc în domeniul de aplicare actual, Trap va prelua controlul, chiar ifany de aplicare părinte are o potrivire Catch bloc.

ACCESAREA EXCEPȚIE INFORMAȚII

Într-un Catch bloc, curentul de eroare pot fi accesate folosind $_, care este, de asemenea, cunoscut sub numele de $PSItem. Obiectul este de tip ErrorRecord.,

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

a rula acest script se întoarce următorul rezultat:

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.

Există proprietăți suplimentare care pot fi accesate, cum ar fi ScriptStackTrace,o Excepție, și ErrorDetails. De exemplu, dacă vom schimba script-ul pentru urmatoarele:

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

rezultatul va fi similar cu:

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

ELIBERAREA de RESURSE PRIN UTILIZAREA în cele din URMĂ

Pentru a elibera resursele folosite de un script, adauga un Finally bloc după Try șiCatch blocuri., Finally bloc de declarații rula indiferent dacăTry bloc întâlnește o rezistență de eroare. PowerShell rulează Finally blockbefore scriptul se termină sau înainte de blocul curent iese din domeniul de aplicare.

a Finally bloc rulează chiar dacă utilizați CTRL+C pentru a opriscript. Un blocFinally rulează, de asemenea, dacă un cuvânt cheie de ieșire oprește scriptul de la un blocCatch.,

a se VEDEA, de ASEMENEA,

about_Break

about_Continue

about_Scopes

about_Throw

about_Trap