- Razlike med napakami, ki se končajo, in napakami, ki se ne končajo, v PowerShell
- Napredna uporaba Try/Catch/Finally in spremenljivk, kot sta $Error in $ErrorActionPreference
- Kako nadzorovati in prilagajati sporočila o napakah za boljšo diagnozo
- Lovljenje specifičnih izjem z uporabo tipov in uporabo funkcije Write-Error

PowerShell je eno najmočnejših in najvsestranskih orodij za avtomatizacijo opravil v okoljih Windows . Vendar pa tako kot vsak skriptni jezik tudi ta ni brez napak in izjem . Razumevanje, kako se te napake poročajo, upravljajo in obravnavajo, je bistvenega pomena za ustvarjanje robustnih, jasnih in enostavnih skriptov za odpravljanje napak.
V tem članku se bomo poglobili v svet napak in izjem v PowerShellu . Naučili se boste ne le, kako pravilno prepoznati različne vrste napak, temveč tudi, kako učinkovito delati s strukturami, kot je Try/Catch/Finally , uporabljati ključne spremenljivke, kot sta $Error ali $ErrorActionPreference , in obvladati napredne tehnike, kot sta metanje in lovljenje izjem z določenimi tipi.
Napake lupine PowerShell: ključni pojmi
Pri uporabi PowerShella so napake del vsakodnevnega razvoja skriptov. Napaka je v bistvu vsak nepričakovan pogoj, ki se pojavi med izvajanjem kode. Vendar pa niso vse napake enake in se ne obravnavajo na enak način.
Napake lahko razdelimo v dve glavni vrsti : napake, ki se končajo, in napake, ki se ne končajo.
- Napake pri prekinitvi: so kritične napake, ki takoj prenehajte izvajanje skripta ali ukaza cmdlet. Te napake je mogoče zajeti s pomočjo struktur
try/catch. - Neusodne napake: ne ustavite skripta. PowerShell jih preprosto prijavi v rdeči barvi in jih shrani
$Errorin nadaljuje z izvajanjem preostale kode.
Če na primer poskušate dostopati do datoteke, ki ne obstaja, bo PowerShell običajno sporočil napako, vendar bo nadaljeval z obdelavo, razen če določite drugače. Za več informacij o naprednem obravnavanju napak si oglejte naš članek o obravnavanju napak v PowerShellu.
Spremenljivka $Error in kako jo uporabljati
PowerShell hrani zgodovino napak v avtomatski spremenljivki $Error, ki deluje kot seznam, kjer so shranjene vse napake, do katerih je prišlo med sejo.
Nekaj ključev o tej spremenljivki:
$ErrorVedno gre za zadnjo napako.- Vsebuje objekte tipa ErrorRecord, ne le besedilna sporočila.
- Privzeto je shranjenih največ 256 napak, nastavljiv prek
$MaximumErrorCount.
Primer uporabe:
# Ver el último error
$Error
# Limpiar la lista de errores
$Error.Clear()
Upoštevajte, da se tukaj, ker gre za globalno spremenljivko, shranjujejo napake celotne seje , ne le tiste iz vašega skripta. Zato je priporočljivo, da se nanjo ne zanašate pretirano ali da jo izbrišete, če boste delali z novimi zapisi.
Lahko tudi uporabite ErrorVariable kot alternativa, ki zajame napake v določenih spremenljivkah za vsak ukaz cmdlet, ne da bi to vplivalo na globalno $Error.
Parametri in nastavitve za obravnavanje napak
PowerShell ponuja več načinov za določanje, kako naj se napake obnašajo . Najpomembnejša sta:
- Parameter
-ErrorAction: Uporabite ga lahko, ko kličete cmdlet, da se odločite, kako ukrepati v primeru napake. - Globalna spremenljivka
$ErrorActionPreference: nastavi splošno politiko napak za celotno okolje ali skript.
Vrednosti, ki jih lahko uporabite, so:
- Nadaljuj (privzeto): prikaže napako in nadaljuje z izvajanjem.
- TihoNadaljuj: Napake ne prikaže, ampak jo shrani
$Error. - stop: Napake obravnavajte kot usodne in ustavite skript, ki omogoča, da jih ujamejo z
try/catch. - Povpraševanje: Vprašajte uporabnika, kaj naj naredi.
- Ignoriraj (od PowerShell 3.0): Popolnoma ignorira napako, ne shrani in ne prikaže je.
Praktični primer:
$ErrorActionPreference = "Stop" # Todos los errores serán tratados como fatales
Get-ChildItem "C:\RutaInexistente" -ErrorAction SilentlyContinue
To nam daje neverjetno fleksibilnost pri odločanju, katere vrste napak je vredno prekiniti in katere ne . Za več podrobnosti o obravnavanju napak v skriptih glejte naš vodnik o izvajanju skriptov v PowerShellu.
Uporaba Poskusi, Ujemi in Končno
Od različice PowerShell 2.0 naprej lahko za strukturirano zajemanje napak uporabimo bloke try/catch/finally .
Njegova sintaksa je naslednja:
Try {
# Código que podría fallar
}
Catch {
# Código para manejar esa excepción
}
Catch {
# Código para manejar errores genéricos
}
Finally {
# Código que siempre se ejecuta al final, falle o no
}
Blok Try izvede kodo, ki bi lahko potencialno povzročila napako. Če pride do usodne (zaključne) napake, koda skoči na ustrezni blok Catch. Če ni določena nobena vrsta izjeme, se zajame vsaka napaka.
Blok Končno je neobvezen, vendar uporaben, kadar morate sprostiti vire, zapreti povezave ali počistiti.
Pravi primer:
Try {
Get-Content "C:\ArchivoInexistente.txt" -ErrorAction Stop
}
Catch {
Write-Error "No se pudo abrir el archivo: $($_.Exception.Message)"
}
Finally {
Write-Output "Finalizado"
}
Znotraj Catch lahko uporabite samodejne spremenljivke $_ o $PSItem da dobite podrobnosti o napaki, kot so njegovo sporočilo, vrsta, sled sklada itd. Če želite izvedeti več o tem, kako izboljšati skripte in obravnavati posebne izjeme, si oglejte naš članek o popravki napak v sistemu Windows 10.
...
Pravilno obravnavanje napak v PowerShellu je ključna veščina za ustvarjanje profesionalnih skriptov in preprečevanje zaustavitve kritičnih opravil zaradi manjših težav. Obvladovanje struktur, kot so Try/Catch/Finally, razumevanje samodejnih spremenljivk, ki jih ponuja PowerShell, in učenje dela s tipiziranimi izjemami so temeljni koraki za izboljšanje kakovosti kode.
Poleg tega orodja kot npr Napiši - Napaka, v kombinaciji s parametri, kot je npr -ErrorAction, nam dajejo popoln nadzor nad tem, kdaj in kako naj bodo napake prikazane, kar nam omogoča, da jih podrobno prilagodimo in prispevamo k boljši izkušnji za tiste, ki izvajajo naše skripte.
Strasten pisec o svetu bajtov in tehnologije nasploh. Rad delim svoje znanje s pisanjem in to je tisto, kar bom počel v tem blogu, saj vam bom pokazal vse najbolj zanimive stvari o pripomočkih, programski opremi, strojni opremi, tehnoloških trendih in še več. Moj cilj je, da vam pomagam krmariti po digitalnem svetu na preprost in zabaven način.