- 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 vsestranskih orodij za avtomatizacijo opravil v okoljih Windows. Vendar kot vsak skriptni jezik tudi ta ni brez pomanjkljivosti. napake in izjeme. Razumevanje, kako se te napake poročajo, upravljajo in obravnavajo, je ključnega pomena za ustvarjanje robustnih, jasnih skriptov, ki jih je enostavno odpraviti.
V tem članku se bomo potopili v svet Napake in izjeme v PowerShell. Naučili se boste ne le pravilno prepoznati različne vrste napak, ampak tudi učinkovito delo s strukturami, kot so Try/Catch/Finally, uporabite ključne spremenljivke, kot je npr $Error o $ErrorActionPreference, in obvlada napredne tehnike, kot je metanje in lovljenje izjem s posebnimi vrstami.
Napake lupine PowerShell: ključni pojmi
Pri uporabi lupine PowerShell so napake vsakodnevni del razvoja skripta. Napaka je v bistvu vsako nepričakovano stanje, ki se pojavi med izvajanjem kode. Vendar niso vse napake enake, niti se ne obravnavajo na enak način.
Napake lahko razvrstimo v dve glavni vrsti:: zaključne napake in napake, ki ne ustavijo script (nezaključne napake).
- 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
$Error
in nadaljuje z izvajanjem preostale kode.
Če na primer poskusite dostopati do datoteke, ki ne obstaja, PowerShell običajno sporoči napako, vendar nadaljujte z obdelavo, razen če ne določite drugače. Za več informacij o naprednem obravnavanju napak si lahko ogledate naš članek o obravnavanje napak v lupini PowerShell.
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:
$Error
Vedno 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števati morate, da je globalna spremenljivka napake celotne seje so shranjeni tukaj, ne le tisti iz vašega skripta. Zato je priporočljivo, da se nanj ne zanašate pretirano ali da ga izpraznite, č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 odločiti, kako naj se obnašajo napake. Dva najbolj relevantna 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 surovo prožnost pri odločanju kakšne napake je vredno prekiniti in katere ne. Za več podrobnosti o obravnavanju napak v skriptih glejte naš vodnik na izvajanje skriptov v lupini PowerShell.
Uporaba Poskusi, Ujemi in Končno
Začenši s PowerShell 2.0, lahko uporabljamo poskusi/ulovi/končno blokira za strukturirano zajemanje napak.
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 Poskusi izvaja kodo, ki bi lahko povzročila napako. Če pride do smrtne (končne) vrste, skočimo v Ulov ustrezna. Če ni podana nobena vrsta izjeme, se napaka ujame.
Blok Končno To ni obvezno, vendar uporabno, ko 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 lupini PowerShell je ena ključnih veščin za ustvarjanje profesionalnih skriptov. in preprečiti, da bi kritično nalogo zaustavili manjši problemi. Obvladovanje struktur, kot je Try/Catch/Finally, razumevanje samodejnih spremenljivk, ki jih ponuja PowerShell, in učenje dela s tipkanimi izjemami so temeljni koraki za izboljšanje kakovosti naše 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.