Magyarázza Try / Catch / végül blokk PowerShell

Try / Catch blokk PowerShell, hogy kezelje a hibákat, amelyek a szkriptben. Pontosabban, a hibáknak meg kell szüntetniük a hibákat. A PowerShell végül blokkja nem kötelező minden alkalommal írni a try / Catch mellett, de végrehajtásra kerül, függetlenül attól, hogy a hiba bekövetkezik-e vagy sem.

tehát a Próbablokk használatakor a fogási blokk kötelező, de nem végül blokk.

  • Try / Catch blokk lezáró hiba − az alábbiakban a példa lezáró hiba nélkül végül blokk.,

példa

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

kimenet

a fenti példában van vissza valami, ami nem engedélyezett, de a következő sor valódi volt, bár a megszüntetési hiba miatt nem tudta végrehajtani.

célunk, hogy elkapjuk a Próbablokkban generált kivételt és hibaüzenetet. Mint tudjuk, a hibát a $Error változó tárolja. Ha ellenőrzi a $error változó kimenetét, megkaphatja a teljes nézetet, de amikor bármilyen szkriptet futtat, és kezeli a hibákat, győződjön meg róla, hogy a $error segítségével törli a régi hibákat.,törölje a () parancsot, vagy használja az új PowerShell konzolt. Abban az esetben, ha ismeri az adott hiba változó helyét egy tömbben, akkor ezt közvetlenül használhatja. Például a $error

láthatjuk, hogy mi a $Error változó összes tulajdonsága.

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

kevés fenti tulajdonság segít megtalálni a kivétel és a hiba részleteit. Hadd lássam őket, és kihasználhatjuk őket a fogási blokkban is.

első InvocationInfo tulajdonság., Ön is használja a $Hiba, de ez az egyetlen hiba keletkezett eddig használjuk közvetlenül $Hiba, de nem tudja, hogy az Autoszuggesztió Felugró $error változó közvetlenül.

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 :

a konkrét információkat a Line and PositionMessage-ből kaphatja meg az alábbiak szerint.

ellenőrizze most a kivétel tulajdonságait.

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.

kivétel üzenet

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.

használhatja a többi tulajdonságot, amely szerint hasznos lesz a hibaüzenet megjelenítéséhez. Ezek közül néhányat fogunk használni a fogási blokkban, hogy elkapjuk a hibát., Ahogy dolgozunk a jelenlegi hiba fogjuk használni$_. az aktuális hiba/Kivétel kezelése.

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:

ahogy fentebb láttuk, nem volt végül blokk, de a try/Catch folytatta a munkát. Felveheti a végül blokk, hogy törölje a változók, hibák, valamint megjeleníti az üzenetet.

  • Try / Catch blokk nem záró hiba.,

Mint láttuk a fenti példa, hogy a hibák Megszüntetéséről szabályozható a try/Catch blokk, de Nem hibák Megszüntetéséről nem, mert beépített parancsmagokat, függvények által generált hibák, illetve az alapértelmezett beállítást a Hiba a művelet Folytatódik, ezért a következő parancs továbbra is fut még akkor is, ha a hiba nem kezelte.

PS C:\WINDOWS\system32> $ErrorActionPreferenceContinue

a nem végződő hiba kényszerítéséhez meg kell változtatnunk a $ErrorActionPreference változót a leállításhoz, vagy meg kell használnunk az Erroraction paramétert a Stop értékkel., Itt a ErrorAction paramétert fogjuk használni, mivel szükségünk van rá egy adott parancshoz, nem pedig a teljes szkripthez.

Példa

Kimenet

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

Mint látható a fenti példában a Get-Service termel, az nem hiba megszüntetéséről, valamint tudjuk alakítani, megszüntetése a hiba által –ErrorAction Ne paraméter ugyanaz a kivétel elkapta Catch Blokk.

  • speciális kivétel kézi kezelése

Ha egy adott típusú kivételt szeretne kezelni, akkor megadhatja a kivétel nevét a fogási blokkban., A kivétel nevének megismeréséhez meg kell szereznie a $Error változó tulajdonságát, ez pedig GetType(). Az alábbi példában meg kell találnunk A kivétel nevét az alábbi hibakimenetből.

példa

tegyük fel, hogy a hibát $Error variable tárolja, a parancs alatt kell futtatnia, hogy megkapja a kivétel nevét a catch block használatához.

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

megkapta a kivétel típusnevét a fenti paranccsal, ugyanazt használhatja a fogási blokkban, így a fogási blokk csak ezt a konkrét kivételt fogja elkapni.,

Output

  • Catch Multiple Exception PowerShell.

a többszörös kivételeket a PowerShellben is elkaphatja. Ehhez, akkor egy próbát blokk Több fogás blokkok.

példa

kimenet

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

itt az első parancsban maga a hiba keletkezett, így a következő parancs nem fog végrehajtani. Ha az első parancs nem generál hibát, akkor a következő parancs kerül ellenőrzésre, és ha a kivétel bekövetkezik, akkor a Catch ezzel az adott kivétel blokk végrehajtásra kerül.,

ha nem akar több kivételt kezelni, és még mindig szüksége van néhány parancsra, a hibák figyelmen kívül hagyhatók, de nem szabad áthaladniuk a catch block-on, így a következő parancs végrehajtható, akkor használhatja a figyelmen kívül hagyást vagy a SilentlyIgnore-t az ErrorAction paraméterben.

Közzé 06-Jun-2020 16:36:12

Reklámok

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

Tovább az eszköztárra