Förklara försök / fånga / slutligen blockera i Power

försök/fånga block i PowerShell är att hantera de fel som produceras i skriptet. För att vara specifik bör felen avsluta fel. Det sista blocket i PowerShell är inte obligatoriskt att skriva varje gång tillsammans med Try/Catch men det kommer att utföras oavsett felet uppstår eller inte.

så när du använder Försöksblocket är Fångstblocket obligatoriskt men inte slutligen blockerat.

  • försök / fångstblock med avslutande fel − nedan är exemplet på avslutande fel utan att slutligen blockera.,

exempel

try{ This is not allowed "This is Allowed"}catch{ Write-Host "Error occured" -BackgroundColor DarkRed}

utgång

i exemplet ovan har vi returnerat något som inte är tillåtet men nästa rad var äkta även om det inte kunde köras på grund av det avslutande felet.

vårt mål är att fånga undantaget och felmeddelandet som genereras i Försöksblocket. Som vi vet lagras felet i $ – Felvariabeln. Om du kontrollerar utmatningen av $ felvariabeln kan du få hela vyn men när du kör ett skript och du hanterar felen, se till att du rensar de gamla felen med $error.,rensa () kommando eller använd den nya PowerShell-konsolen. Om du känner till den specifika Felvariabeln i en array kan du direkt använda den. Till exempel, $error

Vi kan se vad som är alla egenskaper för $Error-variabeln.

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 finns få egenskaper ovanifrån som hjälper dig att hitta undantags-och felinformationen. Låt se dem och vi kan utnyttja dem i Fångstblocket också.

första InvocationInfo-egenskapen., Du kan också använda $fel men det här är det enda felet som genereras hittills så vi använder direkt $fel men du kan inte få autosuggestion Popup med $felvariabel direkt.

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å specifik information från linje och PositionMessage som visas nedan.

Kontrollera nu Undantagsegenskaperna.

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.

Undantagsmeddelande

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 använda de andra egenskaper som du tror kommer att vara till hjälp för att visa felmeddelandet. Vi kommer att använda några av dessa i Fångstblocket för att fånga felet., När vi arbetar med det aktuella felet kommer vi att använda $_. för att hantera det aktuella felet / undantaget.

utgång

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 ovan fanns det inget slutligt block men försök / fångst fortsatte att fungera. Du kan lägga till det äntligen blocket för att rensa dina variabler och fel och visa ett meddelande.

  • försök / fånga block med icke-avslutande fel.,

som vi har sett i ovanstående exempel att avsluta fel kan styras med försök / fångstblock men icke-avslutande fel kan inte eftersom de är inbyggda cmdlets och funktioner genererade fel och standardinställningen för Felåtgärden fortsätter och därmed fortsätter nästa kommando att köras även om felet inte hanteras.

PS C:\WINDOWS\system32> $ErrorActionPreferenceContinue

för att tvinga det icke-avslutande felet till det avslutande felet måste vi ändra antingen $Erroractionpreferensvariabeln för att stoppa eller behöva använda parametern ErrorAction med stoppvärde., Här kommer vi att använda Erroraction-parametern eftersom vi behöver den för ett specifikt kommando och inte för hela skriptet.

exempel

utgång

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 exemplet ovan ger Get-Service det icke-avslutande felet och vi kan konvertera det till att avsluta fel genom –ErrorAction Stoppparameter och samma undantag har fångats av fångstblock.

  • hantera specifikt undantag manuellt

om du vill hantera en viss typ av undantag kan du ange undantagsnamnet i fångstblocket., För att veta namnet på undantaget måste du få egenskapen för $ Error-variabeln och det är GetType(). I exemplet nedan måste vi hitta undantagsnamnet från felutmatningen nedan.

exempel

anta att ditt fel lagras i $Felvariabel, måste du köra under kommandot för att få undantagsnamnet att använda i fångstblock.

$Error.Exception.GetType().FullName
PS C:\WINDOWS\system32> $Error.Exception.GetType().FullNameSystem.Management.Automation.MethodInvocationException

du fick namnet undantagstyp med ovanstående kommando, du kan använda samma i fångstblocket så fångstblocket fångar bara det specifika undantaget.,

utgång

  • fånga flera undantag PowerShell.

Du kan också fånga flera undantag i PowerShell. För det kan du använda ett enda Försöksblock och flera fångstblock.

exempel

utgång

Cannot find path 'C:\temp\cominfo1.html' because it does not exist.Setting up ErrorActionPreference to the Default value

här, i det första kommandot, genereras fel så att nästa kommando inte körs. Om det första kommandot inte genererar något fel kommer nästa kommando att kontrolleras och om undantaget inträffar kommer fångst med det specifika undantagsblocket att utföras.,

om du inte vill hantera flera undantag och fortfarande behöver för vissa kommandon fel kan ignoreras men bör inte passera genom fångstblock så nästa kommando kan köra då kan du använda ignorera eller Tystlyignore i Erroraction parametern.

publicerad 06-Jun-2020 16:36:12

annonser

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Hoppa till verktygsfältet