- 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 Trap
declaraț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 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.,
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 Catch
bloc.
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 Catch
bloc 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 Catch
bloc.,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 Catch
bloc 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
Lasă un răspuns