En feil i et PowerShell-skriptet vil hindre den fra å fullføre vellykket. Ved hjelp av feil håndtering og prøve å fange blokker tillate for å håndtere og svare på disse avslutte feil. I dette innlegget vil jeg dekke det grunnleggende av try/catch-blokker og hvordan å finne og håndtere spesifikke unntak meldinger.

Forstå Syntaks

try catch-blokk syntaks er veldig enkelt., Det er sammensatt av to deler står i klammeparentes med den første identifisert som prøver blokker og den andre som catch-blokk.

try { # Statement to try}catch { # What to do with terminating errors}

try-blokk kan ha så mange uttrykk i det som jeg vil, men jeg vil anbefale å holde det til så få som mulig, trolig bare en enkelt setning. Poenget med håndtering av feil er å jobbe med en uttalelse i en tid og forholde seg til noe som skjer med det.

Her er et eksempel på en feil som oppstår i PowerShell-konsollen., Her er jeg å opprette en ny fil med det Nye-Element cmdlet og spesifisere en ikke-eksisterende mappe for Path:

Hvis dette var i et skript, gi ut denne til skjermen ville kaste bort noen plass, og problemet kan ikke være umiddelbart synlige. Ved hjelp av en prøve catch-blokk, jeg kan begynne å manipulere feil utgang, og gjøre det mer admin vennlig.

Her er våre samme Ny-kommandoen Element i en prøve catch-blokk. Merk at på linje 2 jeg måtte legge den ErrorAction parameter med en verdi av Stop-kommandoen., Ikke alle feil regnes som «avslutte», så noen ganger har jeg behov for å legge til denne bit av koden for å kunne avslutte i catch-blokk.

Nå i stedet for en blokk av rød sint utseende, tekst, har jeg et enkelt advarsel om at det kjørte inn i et problem. Den ikke-eksisterende Sti langs med tvang -ErrorAction Stoppe dråper logikken i catch-blokk og vise min egendefinert advarsel.

ved Hjelp av $ – Feil Variabel

Mens mer lesbar, dette er ikke veldig nyttig., Alt jeg vet er at kommandoen ble ikke fullført, men jeg vet ikke hvorfor. I stedet for å vise min egendefinert melding, kan jeg vise spesifikke feilmeldinger som oppstod i stedet for hele rød tekst unntak blokk. Når det oppstår en feil i try-blokken, det lagres til variabelen som heter $Feil. Den $Feil variabel som inneholder et utvalg av nylige feil, og jeg kan henvise til den siste feilen i tabellen på indeks 0.,

advarsel utgang er nå mer beskrivende viser at kommandoen mislyktes fordi det ikke kunne finne en del av banen. Denne meldingen var en del av vår opprinnelige feilmeldingen, men er nå mer konsis.

Med Unntak av Meldinger

jeg kan også bruke flere catch-blokker i tilfelle jeg ønsker å håndtere spesifikke feil annerledes. Her kommer jeg til å vise to forskjellige egendefinerte meldinger, for hvis banen ikke finnes, og en for hvis en ulovlig tegn brukes i navnet., Merk at i det følgende skjermbilde jeg kjørte script to ganger med to forskjellige kommandoer i try-blokken. Hver kommando, catch-blokk, og det endelige resultatet er vist med oransje og grønne pilene.

Se på linjer 14-16, det er en tredje fange blokk uten et unntak for melding. Dette er en «catch-all» catch-blokken som vil kjøre hvis feilen ikke samsvarer med noen andre catch-blokk unntak., Hvis jeg kjører dette skriptet og se meldingen i siste catch-blokk, så jeg vet at feilen ikke er knyttet til en ulovlig tegn i filnavnet eller del av banen som ikke er gyldig.

Nå hvordan gjorde jeg vet unntak meldinger til bruk i de første to catch-blokkene? Dette kan bli funnet ved å se på de ulike opplysningene som er festet til $Feil variabel. Etter et mislykket kommando skjer, jeg kan kjøre $Feil.Unntak.GetType().FullName å vise unntak melding for den siste feilen som oppsto.,

Gå tilbake til PowerShell-konsollen, jeg reran den Nye Element kommando med en ikke-eksisterende bane, deretter løp min $Feil kommando for å finne unntak melding.

Den røde teksten umiddelbart etter den mislykkede kommandoen inneholder også unntak meldingen, men som ikke inneholder noe som module det er fra. Se på $Feil variabelen viser den fullstendige meldingen som skal brukes for en catch-blokk.,

ved Hjelp av try/catch-blokker gir ekstra kraft i håndtering av feil i skriptet og tar ulike tiltak basert på feilen. Catch-blokk kan vise mer enn bare en feilmelding. Det kan inneholde logikk som vil løse problemet og fortsette å utføre resten av skriptet.