- Atšķirības starp pārtraucošām un nepārtraucošām kļūdām PowerShell
- Paplašināta Try/Catch/Finally un mainīgo, piemēram, $Error un $ErrorActionPreference, lietošana
- Kā kontrolēt un pielāgot kļūdu ziņojumus labākai diagnostikai
- Konkrētu izņēmumu uztveršana, izmantojot tipus un Write-Error izmantošanu
PowerShell ir viens no jaudīgākajiem un daudzpusīgākajiem rīkiem uzdevumu automatizēšanai Windows vidēs . Tomēr, tāpat kā jebkura skriptvaloda, arī tā neizbēgami rada kļūdas un izņēmumus . Izpratne par to, kā šīs kļūdas tiek ziņotas, pārvaldītas un apstrādātas, ir būtiska, lai izveidotu stabilus, skaidrus un viegli atkļūdojamus skriptus.
Šajā rakstā mēs iedziļināsimies kļūdu un izņēmumu pasaulē programmā PowerShell . Jūs uzzināsiet ne tikai to, kā pareizi identificēt dažādus kļūdu veidus, bet arī to, kā efektīvi strādāt ar tādām struktūrām kā Try/Catch/Finally , izmantot galvenos mainīgos, piemēram, $Error vai $ErrorActionPreference , un apgūsiet tādas uzlabotas metodes kā izņēmumu mešana un uztveršana ar noteiktiem tipiem.
PowerShell kļūdas: galvenie jēdzieni
Izmantojot PowerShell, kļūdas ir ikdienas skriptu izstrādes sastāvdaļa. Kļūda būtībā ir jebkurš negaidīts apstāklis, kas rodas koda izpildes laikā. Taču ne visas kļūdas ir vienādas, un tās netiek apstrādātas vienādi.
Kļūdas var iedalīt divos galvenajos veidos : pārtraukšanas kļūdas un nepārtraukšanas kļūdas.
- Pārtraukšanas kļūdas: ir kritiskas kļūdas, kas nekavējoties pārtrauciet skripta vai cmdlet izpilde. Šīs kļūdas var fiksēt, izmantojot struktūras
try/catch. - Nenāvējošas kļūdas: nepārtrauciet skriptu. PowerShell vienkārši ziņo par tiem sarkanā krāsā un saglabā tos
$Errorun turpina izpildīt pārējo kodu.
Piemēram, ja mēģināt piekļūt failam, kas neeksistē, PowerShell parasti ziņos par kļūdu, bet turpinās apstrādi, ja vien nenorādīsiet citādi. Lai iegūtu papildinformāciju par papildu kļūdu apstrādi, skatiet mūsu rakstu par kļūdu apstrādi pakalpojumā PowerShell.
Mainīgais $ Error un tā izmantošana
PowerShell saglabā kļūdu vēsturi automātiskajā mainīgajā $Error, kas darbojas kā saraksts, kurā tiek saglabātas visas sesijas laikā radušās kļūdas.
Daži taustiņi par šo mainīgo:
$ErrorTā vienmēr ir pēdējā kļūda.- Satur ErrorRecord tipa objektus, ne tikai īsziņas.
- Pēc noklusējuma tiek saglabātas ne vairāk kā 256 kļūdas, konfigurējams caur
$MaximumErrorCount.
Lietošanas piemērs:
# Ver el último error
$Error
# Limpiar la lista de errores
$Error.Clear()
Paturiet prātā, ka, tā kā tas ir globāls mainīgais, šeit tiek glabātas kļūdas no visas sesijas , ne tikai no jūsu skripta. Tāpēc nav ieteicams uz to pārāk daudz paļauties vai to notīrīt, ja plānojat strādāt ar jauniem ierakstiem.
Jūs varat arī izmantot ErrorVariable kā alternatīvu, kas tver kļūdas konkrētos mainīgajos katram cmdlet, neietekmējot globālo $Error.
Kļūdu apstrādes parametri un preferences
PowerShell piedāvā vairākus veidus, kā izlemt, kā rīkoties kļūdām . Divi svarīgākie ir:
- Parametrs
-ErrorAction: varat to izmantot, izsaucot cmdlet, lai izlemtu, kā rīkoties kļūdas gadījumā. - Globālais mainīgais
$ErrorActionPreference: iestata vispārējo kļūdu politiku visai videi vai skriptam.
Varat izmantot šādas vērtības:
- Turpināt (noklusējums): parāda kļūdu un turpina izpildi.
- Klusi Turpināt: Tas nerāda kļūdu, bet saglabā to
$Error. - apstāties: Uztveriet kļūdas kā fatālas un pārtrauciet skriptu, ļaujot tos notvert ar
try/catch. - Jautāt: jautājiet lietotājam, ko darīt.
- Ignorēt (kopš PowerShell 3.0): pilnībā ignorē kļūdu, to nesaglabājot un nerādot.
Praktisks piemērs:
$ErrorActionPreference = "Stop" # Todos los errores serán tratados como fatales
Get-ChildItem "C:\RutaInexistente" -ErrorAction SilentlyContinue
Tas dod mums neticamu elastību, lemjot, kāda veida kļūdas ir vērts pārtraukt un kuras nē . Lai iegūtu sīkāku informāciju par kļūdu apstrādi skriptos, skatiet mūsu rokasgrāmatu par skriptu palaišanu programmā PowerShell.
Izmantojot Izmēģināt, noķert un Visbeidzot
Sākot ar PowerShell 2.0, mēs varam izmantot try/catch/finally blokus, lai strukturētā veidā fiksētu kļūdas.
Tās sintakse ir šāda:
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
}
Try bloks izpilda kodu, kas varētu radīt kļūdu. Ja rodas fatāla (apturoša) kļūda, kods pāriet uz atbilstošo Catch bloku. Ja nav norādīts izņēmuma veids, jebkura kļūda tiek uztverta.
Bloks “Finally” ir neobligāts, bet noderīgs, ja nepieciešams atbrīvot resursus, slēgt savienojumus vai sakopt.
Reāls piemērs:
Try {
Get-Content "C:\ArchivoInexistente.txt" -ErrorAction Stop
}
Catch {
Write-Error "No se pudo abrir el archivo: $($_.Exception.Message)"
}
Finally {
Write-Output "Finalizado"
}
Nozvejas ietvaros varat izmantot automātiskos mainīgos $_ o $PSItem lai iegūtu sīkāku informāciju par kļūdu, piemēram, tā ziņojums, veids, steka izsekošana utt. Ja vēlaties uzzināt vairāk par to, kā uzlabot skriptus un rīkoties ar konkrētiem izņēmumiem, skatiet mūsu rakstu par kļūdu labojumi operētājsistēmā Windows 10.
...
Pareiza kļūdu apstrāde programmā PowerShell ir galvenā prasme profesionālu skriptu izveidē un kritisku uzdevumu apturēšanas novēršanā nelielu problēmu dēļ. Tādu struktūru kā Try/Catch/Finally apgūšana, PowerShell piedāvāto automātisko mainīgo izpratne un mācīšanās strādāt ar tipizētiem izņēmumiem ir būtiski soļi koda kvalitātes uzlabošanā.
Turklāt tādi instrumenti kā Rakstīšanas kļūda, apvienojumā ar tādiem parametriem kā -ErrorAction, sniedz mums pilnīgu kontroli pār to, kad un kā kļūdas ir jāparāda, ļaujot mums tās detalizēti pielāgot un nodrošināt labāku pieredzi tiem, kas vada mūsu skriptus.
Kaislīgs rakstnieks par baitu pasauli un tehnoloģiju kopumā. Man patīk dalīties savās zināšanās rakstot, un tieši to es darīšu šajā emuārā, parādot visu interesantāko informāciju par sīkrīkiem, programmatūru, aparatūru, tehnoloģiju tendencēm un daudz ko citu. Mans mērķis ir palīdzēt jums vienkāršā un izklaidējošā veidā orientēties digitālajā pasaulē.
