o eroare într-un script PowerShell va împiedica finalizarea cu succes. Utilizarea de manipulare a erorilor cu încercați blocuri de captură permite gestionarea și de a răspunde la aceste erori de terminare. În această postare voi acoperi elementele de bază ale blocurilor de încercare/captură și cum să găsiți și să gestionați anumite mesaje de excepție.
înțelegerea sintaxei
sintaxa try catch block este foarte simplă., Acesta este compus din două secțiuni închise în paranteze buclat cu primul identificat ca blocul de încercare și al doilea ca blocul de captură.
try { # Statement to try}catch { # What to do with terminating errors}
blocul try poate avea cât mai multe declarații în el, după cum vreau; cu toate acestea, aș recomanda să-l păstrați la cât mai puține, probabil doar o singură declarație. Punctul de eroare de manipulare este de a lucra cu o declarație la un moment dat și să se ocupe de tot ce se întâmplă cu ea.
Iată un exemplu de eroare care apare în consola PowerShell., Aici sunt crearea unui nou fișier folosind Noua-Element cmdlet și specificând un non-existent folder pentru Calea:
Dacă acest lucru a fost într-un script, scoate asta la ecran și-ar irosi spațiu și problema nu poate fi imediat vizibil. Folosind un bloc de captură try, pot începe să manipulez ieșirea de eroare și să o fac mai prietenoasă pentru admin.
aici este aceeași comandă nou-element într-un bloc de captură try. Rețineți că pe linia 2 a trebuit să adaug parametrul ErrorAction cu o valoare de oprire la comandă., Nu toate erorile sunt considerate „terminate”, așa că uneori trebuie să adaug acest bit de cod pentru a termina corect în blocul de captură.
Acum, în loc de un bloc de roșu furios-căutarea de text, am un simplu mesaj de avertizare care a fugit într-o problemă. Numele căii inexistente, împreună cu oprirea forțării-ErrorAction, aruncă logica în blocul de captură și afișează avertismentul meu personalizat.
folosind variabila $ Error
deși este mai ușor de citit, acest lucru nu este foarte util., Tot ce știu este comanda nu a finalizat cu succes, dar nu stiu de ce. În loc să afișez mesajul meu personalizat, pot afișa mesajul de eroare specific care a apărut în locul întregului bloc de excepții de text roșu. Când apare o eroare în blocul try, aceasta este salvată în variabila numită $Error. Variabila $ Error conține o serie de erori recente și pot face referire la cea mai recentă eroare din matrice la indexul 0.,
avertisment de ieșire este acum mult mai descriptivă arată că comanda nu a reușit pentru că nu a putut găsi o parte din cale. Acest mesaj a făcut parte din mesajul nostru original de eroare, dar acum este mai concis.
folosind Mesaje de excepție
pot folosi, de asemenea, mai multe blocuri de captură în cazul în care vreau să se ocupe de erori specifice în mod diferit. Aici voi afișa două mesaje personalizate diferite, unul pentru dacă calea nu există și unul pentru dacă un caracter ilegal este utilizat în nume., Rețineți că în următoarea captură de ecran am rulat scriptul de două ori cu două comenzi diferite în blocul try. Fiecare comandă, bloc de captură și ieșire finală sunt indicate de săgețile portocalii și verzi.
se Uită la liniile 14-16, există un al treilea bloc catch fără un mesaj excepție. Acesta este un bloc de captură „catch-all” care va rula dacă eroarea nu se potrivește cu nicio altă excepție a blocului de captură., Dacă rulez acest script și văd mesajul în ultimul bloc de captură, atunci știu că eroarea nu este legată de un caracter ilegal din numele fișierului sau o parte a căii care nu este validă.
acum, cum am știut mesajele de excepție pentru a utiliza în primele două blocuri de captură? Acest lucru poate fi găsit analizând diferitele informații atașate variabilei $Error. După ce apare o comandă eșuată, pot rula $Error.Excepție.GetType ().FullName pentru a vizualiza mesajul de excepție pentru ultima eroare care a avut loc.,revenind la consola PowerShell, am reluat comanda New-Item cu o cale inexistentă, apoi am rulat comanda mea de eroare $pentru a găsi mesajul de excepție.
text rosu imediat următoare nu a reușit comandă conține, de asemenea mesajul de excepție, dar nu conține care modulului este de. Privind la variabila $ Error arată mesajul complet pentru a fi utilizat pentru un bloc de captură.,utilizarea blocurilor try / catch oferă o putere suplimentară în gestionarea erorilor într-un script și luarea de acțiuni diferite pe baza erorii. Blocul de captură poate afișa mai mult decât un mesaj de eroare. Poate conține logică care va rezolva eroarea și va continua să execute restul scriptului.