Vysvětlete Try / Catch / Finally block v PowerShell

try / Catch block v PowerShell je zpracovat chyby, které jsou vytvořeny ve skriptu. Abych byl konkrétní, chyby by měly být ukončením chyb. Konečně blok v PowerShell není povinný psát pokaždé spolu s Try/Catch, ale bude proveden bez ohledu na to, zda dojde k chybě nebo ne.

takže při použití bloku Try je blok úlovku povinný, ale nakonec není blokován.

  • zkuste / Catch blok s Ukončovací chybou – níže je příklad ukončení chyby bez konečného blokování.,

Příklad:

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

Výstup

Ve výše uvedeném příkladu, musíme se vrátit něco, co není dovoleno, ale další linka byla originální, i když to nemohl provést z důvodu ukončení chyba.

Naším cílem je zachytit výjimku a chybovou zprávu generovanou v bloku Try. Jak víme, chyba je uložena v proměnné $ Error. Pokud zkontrolujete výstup proměnné $ error, můžete získat celý pohled, ale vždy, když spustíte libovolný skript a vy zpracováváte chyby, ujistěte se, že vymažete staré chyby pomocí $error.,příkaz clear () nebo použijte novou konzolu PowerShell. V případě, že znáte konkrétní umístění proměnné chyby v poli, můžete ji přímo použít. Například $error

vidíme, jaké jsou všechny vlastnosti proměnné $ Error.

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

existuje jen málo vlastností shora, které jsou užitečné pro nalezení podrobností o výjimce a chybě. Uvidíme je a můžeme je využít i v bloku úlovků.

první vlastnost InvocationInfo., Můžete také použít chybu$, ale toto je zatím jediná chyba generovaná, takže používáme přímo chybu$, ale nemůžete získat vyskakovací okno AutoSuggestion s proměnnou $ error přímo.

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 :

můžete získat konkrétní informace z řádku a PositionMessage, jak je uvedeno níže.

zkontrolujte nyní vlastnosti výjimky.

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.

Zpráva Výjimky

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.

můžete používat i další vlastnosti, které si myslíte, že bude užitečné, aby se zobrazí chybová zpráva. Některé z nich použijeme v bloku úlovků, abychom zachytili chybu., Jak pracujeme s aktuální chybou, použijeme $_. Chcete-li se vypořádat s aktuální chybou/výjimkou.

výstup

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:

jak jsme viděli výše, nebyl nakonec blok, ale pokus / úlovek pokračoval v práci. Můžete přidat konečně blok vymazat proměnné a chyby a zobrazit jakoukoli zprávu.

  • zkuste / Zachyťte blok s nekončící chybou.,

Jak jsme viděli ve výše uvedeném příkladu, že Ukončení chyby mohou být řízeny s Try/Catch bloku, ale Non-Ukončení chyby nemůže, protože jsou vestavěné rutiny a funkce generované chyby a výchozí preference pro Chybu akci je i Nadále, a proto další příkaz pokračovat v jízdě, i když chyba není zpracována.

PS C:\WINDOWS\system32> $ErrorActionPreferenceContinue

vynutit Non-Ukončení chybová ke Koncovému chyba, musíme změnit buď $ErrorActionPreference proměnné Zastavit, nebo je potřeba použít ErrorAction parametr s hodnotou., Zde použijeme parametr ErrorAction, protože jej potřebujeme pro konkrétní příkaz a ne pro celý skript.

Příklad:

Výstup

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

Jak můžete vidět ve výše uvedeném příkladu, Get-Service produkuje non-zastavení chyba a můžeme jej převést na ukončení chyby –ErrorAction Zastavit parametr a stejným výjimkou byl chycen Bloku Catch.

  • Ruční Manipulaci Specifické Výjimky,

Pokud chcete zpracovat konkrétní typ výjimky pak můžete poskytnout název výjimky v bloku catch., Chcete-li znát název výjimky, musíte získat vlastnost proměnné $Error a je GetType(). V níže uvedeném příkladu musíme najít název výjimky z chybového výstupu níže.

Příklad:

Předpokládejme, že vaše chyba je uložena v $Chyba proměnné, musíte spustit příkaz níže, aby si výjimku název, který chcete použít v catch bloku.

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

máte typ výjimky jméno příkazu výše, můžete použít stejné v catch bloku, takže blok catch chytit jen, že zvláštní výjimka.,

výstup

  • catch Multiple Exception PowerShell.

můžete také zachytit více výjimek v PowerShell. K tomu můžete použít jeden pokusný blok a více bloků úlovku.

Příklad:

Výstup

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

Tady, v první příkaz, sám chyby generované, takže další povel nechce provést. Pokud první příkaz nevytvoří žádnou chybu, bude zkontrolován další příkaz a pokud dojde k výjimce, bude proveden Catch s tímto konkrétním blokem výjimek.,

Pokud nechcete, aby zvládnout více výjimek a stále budete potřebovat pro některé příkazy chyby mohou být ignorovány, ale neměl by projít catch bloku, tak další příkaz mohl provést, pak můžete použít Ignorovat nebo SilentlyIgnore v ErrorAction Parametr.

, Zveřejněno dne 06-Jun-2020 16:36:12

Inzeráty

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Přejít k navigační liště