Manipulați erorile PowerShell ca un șef cu aceste sfaturi
Când porniți mai întâi scripting-ul în PowerShell, acesta poate fi tentant să împachetați o serie de comenzi Powershell Cmdlets care vă vor îmbunătăți abilitățile de administrare Windows Powershell Cmdlets care vă vor îmbunătăți abilitățile de administrare Windows Powershell este un instrument de linie egal pentru comenzi și limbaj de scripting. Vă oferă posibilitatea de a automatiza computerul prin aceleași comenzi pe care le utilizați pentru a le administra. Citeste mai mult . Cu toate acestea, dacă script-ul dvs. nu reușește, nu veți ști unde să începeți depanarea. Pentru a vă salva de la pierderea timpului încercând să ghiciți de ce scriptul dvs. a eșuat, ar trebui să utilizați gestionarea erorilor.
Există patru părți pentru manipularea erorilor PowerShell: parametrul Error Action, blocurile Try / Catch, parametrul Error Variable și logging.
Eroare PowerShell Manipularea modului simplu
Prima dată când doriți să gestionați erorile este când ceva vă oprește scenariul în piesele sale. Dacă eșecul nu afectează pașii dvs. ulteriori, ar fi mai bine să o săriți și să mergeți mai departe.
Pe de altă parte, nu este întotdeauna clar când un cmdlet dat aruncă o eroare de terminare. Unele cmdlet-uri returnează o eroare, dar nu opresc scenariul. Apoi, puteți să așteptați terminarea scenariului dvs. în timp ce acesta generează nonsens.
Aici este locul unde -ErrorAction parametru vine. Utilizați acest lucru pentru a forța un cmdlet să se ocupe de eroare așa cum doriți. Dacă modificați un script existent Îmbunătățiți productivitatea cu scripturile Windows PowerShell Boostați productivitatea cu scripturile Windows PowerShell Ce se întâmplă dacă ați putea aduce productivitatea Linux pe Windows? Cele mai multe distribuții Linux vin ambalate cu shell-ul puternic Bash. PowerShell este un terminal la fel de puternic pentru Windows. Citiți mai multe, adăugați-l la sfârșitul liniei de cmdlet.
Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Stop
Evident, dacă utilizați Get-ChildItem cmdlet pe cont propriu, eroarea nu face mult pentru tine. Cu toate acestea, dacă doriți să faceți ceva cu datele, ar fi bine să opriți scenariul, astfel încât să știți că căutarea a eșuat și de ce. Alternativ, dacă efectuați mai multe căutări, modificați parametrul Stop la SilentlyContinue, așa că scriptul continuă dacă o căutare eșuează. Dacă doriți să vedeți ce este eroarea, puteți să o utilizați Continua ca parametru în schimb.
Get-ChildItem -Path "~ \ Documente \ * .jpg" -Recurse -ErrorAction SilentlyContinue
Dacă preferați să controlați ce se întâmplă de fiecare dată când scriptul dvs. rulează, îl puteți modifica Întreba. Când cmdlet-ul dvs. atinge o lovitură, acesta oferă opțiuni: Da, Da pentru toți, Opriți comanda, Suspendați sau Ajutați.
Această opțiune este un pic mai flexibilă, dar înseamnă că erorile determină scriptul să aștepte introducerea. Asta nu ar putea fi ceva pe care îl doriți când conduceți un proces lung peste noapte.
Eroare Manipularea modului de programare
ErrorAction parametrul vă adresează erorile într-un mod necomplicat. Cu toate acestea, dacă sunteți în căutarea unui pic mai mult control asupra erorilor, PowerShell vă acoperă în continuare. Utilizarea Încearcă să prinzi, acum putem ramifica script-ul atunci când cmdlets returnează o eroare.
Așa cum sugerează și numele, Încearcă să prinzi este alcătuită din două părți. (Există tehnic o treime, dar vom ajunge la asta într-un minut.) Primul este Încerca secțiune. Veți executa codul dvs. normal în această secțiune. Încă mai veți folosi -ErrorAction parametru, dar poate fi setat numai ca Stop. Acest steguleț asigură faptul că cmdlet-ul dvs. declanșează Captură-chiar dacă nu are o eroare de terminare.
Încearcă Get-Process "Cortana" -ErororAction Stop
Încercați, de asemenea, să împiedicați difuzarea altor cmdlet-uri în cazul în care căutarea nu reușește. În acest caz, dacă ați fi trimis Get-proces rezultatele până la Stop-proces, o căutare eșuată împiedică executarea celui de-al doilea cmdlet.
Deci, acum că ați creat un bloc de încercare de cmdlets, ce vrei să faci atunci când eșuează? Utilizarea Captură jumătate, veți defini acest lucru.
Catch Procesul de scriere-gazdă nu a fost găsit
Ca și în cazul ErrorAction parametru, atunci când faci ceva un pic mai complex 3 Funcții inteligente PowerShell după upgrade la Windows 10 3 Funcții inteligente PowerShell după upgrade la Windows 10 Windows 10 ne aduce un nou PowerShell, în esență, Command Prompt pe steroizi. Acest articol vă arată cum să faceți altfel imposibil cu PowerShell. Și este mai ușor decât crezi! Citeste mai mult Captură va fi utilă pentru mai mult decât oferirea unui eșec clar al limbajului. (În exemplul de mai sus, eșecul este forțat prin utilizarea numelui aplicației, și nu a numelui procesului.) Asigurați-vă că vă jucați cu Încerca bloc pentru a crea o căutare / acțiune de care aveți nevoie. Puteți utiliza funcția Captură blocați dacă scriptul dvs. vă trimite un e-mail dacă nu reușește.
Partea a treia vine la îndemână dacă doriți ca ceva să ruleze indiferent dacă cmdletul dvs. reușește sau nu. Pentru aceasta, puteți folosi In cele din urma bloc. Adăugați acest lucru după încercarea și capturarea și înregistrarea când se termină o secțiune a scriptului.
Variabila de eroare și înregistrare în jurnal
Scriptul dvs. controlează acum modul în care gestionează erorile și modul în care le răspunde. Aveți posibilitatea să-l utilizați ca o sarcină programată, sau cel puțin rulați-l atunci când nu sunteți la birou 5 motive pentru care ar trebui să utilizați PowerShell în loc de script-ul de lot 5 motive pentru care ar trebui să utilizați PowerShell în loc de script-ul de scripturi PowerShell este ceea ce ați obține dacă a trecut linia de comandă cu șirul de scripturi, a aruncat în câteva caracteristici suplimentare și a dat-o peste câteva crestături. Iată câteva motive pe care ar trebui să le încercați. Citeste mai mult . Cu toate acestea, cum puteți investiga un script eșuat? Cu -ErrorVariable parametru erorile dvs. de cmdlet scrie într-o variabilă personalizată. Aceasta este o alternativă la sistem $ Eroare care conține toate erorile din sesiunea curentă.
Cmdlet-ul tău trebuie să fie mai lung. Mai întâi, definiți o variabilă, ceva de genul $ SearchError va face pentru exemplu. Când sunați SearchError în ErrorVariable parmeter, nu folosiți semnul dolarului. Chiar dacă apelați o variabilă pe care ați creat-o, datorită modului în care funcționează parametrul, îl numiți fără semnul dolarului. Apoi adăugați asta la sfârșitul liniei.
Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Continuă -ErrorVariabilă SearchError
Dacă adăugați a + în fața numelui variabilei, puteți adăuga la variabila, mai degrabă decât să o înlocuiți direct. Asta vă face același comportament ca și variabila globală de eroare. În schimb, puteți utiliza această ieșire și Încearcă să prinzi pentru a scrie ieșire personalizată, și ștampilați-o.
Pentru a face acest lucru, creați un fișier text imediat după ce ați setat variabila de eroare. Faceți acest lucru cu Nou-Articol cmdlet. Poate doriți să utilizați Întreba opțiune pentru ErrorAction parametru. Aceasta vă permite să adăugați la un jurnal existent atunci când Nou-Articol cmdlet nu reușește.
$ SearchLog = Articol nou "~ \ SearchLog.txt" - fisier tip -ErrorAction Cerere
Acum când vă construiți Încearcă să prinzi bloc, puteți utiliza Captură pentru a vă conecta la un fișier text. Să utilizați Get-Data pentru a crea marca de timp. Formatul poate fi dificil, așa că nu uitați să îl copiați din exemplul respectiv.
Încercați Get-ChildItem -Path "~ \ Documents \ * jpg" -Recurse -ErrorAction Stop -ErrorVariable SearchError Catch Add-Content -Path $ SearchLog -Value "$ (Get-Date -Format dd-MM- hh_mm_ss) Fișierele nu au fost returnate eroare: $ SearchError "
Repetați că este necesar pentru toate cmdlet-urile dvs. 15 Sarcini avansate PowerShell se pot ocupa în Windows 10 15 Sarcini avansate PowerShell se pot ocupa în Windows 10 PowerShell este similar cu promptul de comandă, dar mai bine. Este un instrument puternic de administrare a sistemului. Am compilat 15 sarcini, unele simple, unele complexe, care beneficiază de magia PowerShell. Citiți mai multe și acum aveți un jurnal frumos de erori. Dacă doriți să urmăriți lucrurile care se execută cu succes, puteți adăuga un element similar Adauga continut la sfârșitul Încerca bloc. Această înregistrare se execută numai atunci când dvs. Încerca cmdlet reușește. Apoi, puteți să vă înregistrați erorile și succesele cu timbrele de timp. Logarea vă permite să aflați tot ce a făcut scriptul, succesul sau eșecul.
Puterea codului
Utilizarea PowerShell pe linia de comandă Command Prompt vs. Windows PowerShell: Care este diferența? Command Prompt vs. Windows PowerShell: Care este diferența? Utilizatorii de Windows pot obține fără să utilizeze nici Promptul de comandă, nici PowerShell. Dar cu Windows 10 și noi caracteristici în jurul colțului, poate că e timpul să învățăm. Citește mai mult este o modalitate puternică de a vă gestiona sistemul. Puteți să colaționați aceleași comenzi într-un mod care să permită o automatizare puternică. Este necesară o manipulare corectă a erorilor pentru a vă asigura că scripturile dvs. fac numai ceea ce doriți. Logarea totul vă poate economisi timp atunci când depanare.
Există o vreme în care tratarea erorilor a salvat baconul? Există un script PowerShell pe care l-ați putea folosi o mai bună manipulare a erorilor? Care este următorul proiect PowerShell? Spuneți-ne în comentariile.
Explorați mai multe despre: PowerShell.