Napake in izjeme v lupini PowerShell: popoln vodnik za ravnanje z njimi

Zadnja posodobitev: 09/04/2025
Avtor: Isaac
  • 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

Izjeme v kodi PowerShell

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.

  Osnove kapsulne garderobe, ki jih morate imeti

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.

  Preprosti načini za odstranjevanje fotografij ozadja namizja v domačih oknih House 10

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.

Kako obravnavati napake v powershell-3
Povezani članek:
Kako učinkovito obravnavati napake v PowerShell

Pustite komentar