Try/Catch-blokken i PowerShell er å håndtere feil som er produsert i skriptet. For å være spesifikk, er det feil bør være avslutte feil. Endelig blokk i PowerShell er ikke obligatorisk å skrive hver gang sammen med Try/Catch men det vil bli utført uavhengig feilen oppstår eller ikke.
Så når du bruker Prøv blokk, Catch-blokken er obligatorisk, men ikke Endelig blokk.
-
Try/Catch-blokk med å Avslutte feil − Nedenfor er eksempel på Avslutning av feil uten endelig blokk.,
Eksempel
try{ This is not allowed "This is Allowed"}catch{ Write-Host "Error occured" -BackgroundColor DarkRed}
Output
I eksempelet ovenfor, må vi gå tilbake på noe som ikke er tillatt, men neste linje var ekte, selv om det kunne ikke gjennomføre på grunn av opphør av feil.
Vårt mål er å fange unntak og feilmelding genereres i Try-blokken. Som vi vet, feilen er lagret i $Feil variabel. Hvis du merker effekt av $feil variabel du kan få hele utsikt, men når du kjører skriptet, og du er håndtering av feil, sørg for at du fjerner den gamle feil ved hjelp av $ – feil.,clear() kommandoen eller bruk den nye PowerShell-konsollen. I tilfelle du vet Feilen variabel beliggenhet i en tabell kan du direkte bruke det. For eksempel, $error
Vi kan se hva som er alle egenskaper av $Feil variabel.
PS C:\WINDOWS\system32> $Error | Get-Member | Select Name, MemberTypeName MemberType---- ----------Equals MethodGetHashCode MethodGetObjectData MethodGetType MethodToString MethodCategoryInfo PropertyErrorDetails PropertyException PropertyFullyQualifiedErrorId PropertyInvocationInfo PropertyPipelineIterationInfo PropertyScriptStackTrace PropertyTargetObject PropertyPSMessageDetails ScriptProperty
Det er noen egenskaper fra over er nyttig for å finne unntak og feil informasjon. La se dem, og vi kan utnytte dem i Catch-blokk som godt.
Første InvocationInfo Eiendom., Du kan også bruke $Feil, men dette er den eneste feil som genereres så langt så vi bruker direkte $Feil, men du kan ikke få AutoSuggestion Popup med $feil variable direkte.
PS C:\WINDOWS\system32> $Error.InvocationInfoMyCommand :BoundParameters : {}UnboundArguments : {}ScriptLineNumber : 3OffsetInLine : 5HistoryId : 50ScriptName :Line : This is not allowedPositionMessage : At line:3 char:5 + This is not allowed + ~~~~PSScriptRoot :PSCommandPath :InvocationName : ThisPipelineLength : 0PipelinePosition : 0ExpectingInput : FalseCommandOrigin : InternalDisplayScriptPosition :
Du kan få spesifikk informasjon fra Linje-og PositionMessage som vist nedenfor.
Sjekk nå Unntak Egenskaper.
PS C:\WINDOWS\system32> $Error.ExceptionThe term 'This' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
Unntak Melding
PS C:\WINDOWS\system32>$error.Exception.MessageThe term 'This' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
Du kan bruke andre egenskaper som du tror vil være nyttig for å vise feilmelding. Vi kommer til å bruke noen av disse i Catch-blokk for å ta feil., Som vi arbeider med gjeldende feil, vil vi bruke $_. for å håndtere den aktuelle feilen/unntak.
Output
Error Message: The term 'This' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.Error in Line: This is not allowedError in Line Number: 3Error Item Name:
Som vi har sett ovenfor, var det ingen til Slutt blokkere men Prøver/Fange fortsatte å jobbe. Du kan legge til Slutt blokk for å fjerne variabler og feil, og vise en melding.
-
Try/Catch-blokk med Ikke-Terminerende feil.,
Som vi har sett i eksemplet ovenfor som Avslutning feil kan kontrolleres med Try/Catch-blokk, men Ikke-Terminerende feil ikke fordi de er bygd i cmdletene og funksjoner generert feil og standard preferanse for Feil handling Fortsette, og derfor neste kommando fortsette å kjøre selv om feilen ikke blir håndtert.
PS C:\WINDOWS\system32> $ErrorActionPreferenceContinue
for Å tvinge Ikke-Terminerende feil å Avslutte feil vi trenger å endre på enten $ErrorActionPreference variabel for å Stoppe eller trenger å bruke ErrorAction parameteren med Stopp-verdi., Her, vi kommer til å bruke ErrorAction Parameter som vi trenger det for en bestemt kommando, og ikke for hele skriptet.
Eksempel
Output
Error Message: Cannot find any service with service name 'WhichService'.Error in Line: Get-Service WhichService -ErrorAction StopError in Line Number: 4Error Item Name:This is going to run anyway
Som du kan se i eksempelet ovenfor, Få Service produserer ikke-terminerende feil, og vi kan konvertere det til å avslutte feil av –ErrorAction Stoppe parameter, og det samme unntaket har blitt fanget av Catch-Blokk.
-
Manuelt Håndtering av Spesielle Unntak
Hvis du ønsker å håndtere en bestemt type unntak så du kan gi unntak navn i catch-blokk., Å vite navnet av unntaket du trenger for å få eiendommen til $Feil variabel, og det er GetType(). I eksempelet nedenfor, må vi finne unntak navn fra feil utgang nedenfor.
Eksempel
la oss Anta at feilen er lagret i $Feil variabel, må du kjøre under kommando for å få unntak navn til bruk i catch-blokk.
$Error.Exception.GetType().FullName
PS C:\WINDOWS\system32> $Error.Exception.GetType().FullNameSystem.Management.Automation.MethodInvocationException
Du fikk unntak skriv navn med kommandoen ovenfor, kan du bruke den samme i fangsten blokk, slik at fangsten blokk vil bare fange det spesielle unntaket.,
Output
-
Fange Flere Unntak PowerShell.
Du kan også ta flere unntak i PowerShell. For det, kan du bruke en enkelt Prøve blokkere og flere catch-blokker.
Eksempel
Output
Cannot find path 'C:\temp\cominfo1.html' because it does not exist.Setting up ErrorActionPreference to the Default value
Her, i første kommando, selv feil som genereres så den neste kommandoen vil ikke kjøre. Hvis den første kommandoen genererer ikke noen feil så den neste kommandoen vil bli sjekket, og om unntak forekommer så Ta med det spesielle unntaket blokk vil bli utført.,
Hvis du ikke ønsker å håndtere flere unntak og du fortsatt behov for noen kommandoer feil kan bli ignorert, men bør ikke passere gjennom fange blokk, slik at den neste kommandoen kunne utføre deretter kan du bruke Ignorere eller SilentlyIgnore i ErrorAction Parameter.