Sdílet prostřednictvím


O funkci Throw

KRÁTKÝ POPIS

Popisuje klíčové slovo Throw, které vygeneruje ukončující chybu.

DLOUHÝ POPIS

Klíčové slovo Throw způsobí ukončující chybu. Pomocí klíčového slova Throw můžete zastavit zpracování příkazu, funkce nebo skriptu.

Můžete například použít klíčové slovo Throw v bloku skriptu příkazu If k reakci na podmínku nebo v bloku Catch příkazu Try-Catch-Finally. Můžete také použít klíčové slovo Throw v deklaraci parametru a nastavit parametr funkce jako povinný.

Klíčové slovo Throw může vyvolat libovolný objekt, například řetězec zprávy uživatele nebo objekt, který chybu způsobil.

SYNTAXE

Syntaxe klíčového slova Throw je následující:

throw [<expression>]

Výraz v syntaxi Throw je volitelný. Pokud se příkaz Throw nezobrazí v bloku Catch a neobsahuje výraz, vygeneruje chybu ScriptHalted.

C:\PS> throw

ScriptHalted
At line:1 char:6
+ throw <<<<
+ CategoryInfo          : OperationStopped: (:) [], RuntimeException
+ FullyQualifiedErrorId : ScriptHalted

Pokud se klíčové slovo Throw použije v bloku Catch bez výrazu, vyvolá znovu aktuální výjimku RuntimeException. Další informace najdete v tématu about_Try_Catch_Finally.

VYVOLÁNÍ ŘETĚZCE

Volitelným výrazem v příkazu Throw může být řetězec, jak je znázorněno v následujícím příkladu:

C:\PS> throw "This is an error."

This is an error.
At line:1 char:6
+ throw <<<<  "This is an error."
+ CategoryInfo          : OperationStopped: (This is an error.:String) [], R
untimeException
+ FullyQualifiedErrorId : This is an error.

VYVOLÁNÍ DALŠÍCH OBJEKTŮ

Výraz může být také objekt, který vyvolá objekt, který představuje proces PowerShellu, jak je znázorněno v následujícím příkladu:

C:\PS> throw (get-process PowerShell)

System.Diagnostics.Process (PowerShell)
At line:1 char:6
+ throw <<<<  (get-process PowerShell)
+ CategoryInfo          : OperationStopped: (System.Diagnostics.Process (Pow
erShell):Process) [],
RuntimeException
+ FullyQualifiedErrorId : System.Diagnostics.Process (PowerShell)

K prozkoumání chyby můžete použít vlastnost TargetObject objektu ErrorRecord v $error automatické proměnné.

C:\PS> $error[0].targetobject

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
319      26    61016      70864   568     3.28   5548 PowerShell

Můžete také vyvolat objekt ErrorRecord nebo výjimku rozhraní Microsoft .NET Framework. Následující příklad používá klíčové slovo Throw k vyvolání System.FormatException objektu.

C:\PS> $formatError = new-object system.formatexception

C:\PS> throw $formatError

One of the identified items was in an invalid format.
At line:1 char:6
+ throw <<<<  $formatError
+ CategoryInfo          : OperationStopped: (:) [], FormatException
+ FullyQualifiedErrorId : One of the identified items was in an invalid
format.

VÝSLEDNÁ CHYBA

Klíčové slovo Throw může vygenerovat objekt ErrorRecord. Vlastnost Exception objektu ErrorRecord obsahuje objekt RuntimeException. Zbytek objektu ErrorRecord a Objekt RuntimeException se liší podle objektu, který vyvolá klíčové slovo Throw.

Objekt RunTimeException je zabalen do objektu ErrorRecord a objekt ErrorRecord je automaticky uložen v $Error automatické proměnné.

POUŽITÍ FUNKCE THROW K VYTVOŘENÍ POVINNÉHO PARAMETRU

Pomocí klíčového slova Throw můžete nastavit parametr funkce jako povinný.

Toto je alternativa k použití parametru Mandatory klíčového slova Parameter. Když použijete povinný parametr, systém vyzve uživatele k zadání požadované hodnoty parametru. Když použijete klíčové slovo Throw, příkaz se zastaví a zobrazí záznam chyby.

Například klíčové slovo Throw v dílčím výrazu parametru vytvoří parametr Path jako požadovaný parametr ve funkci.

V tomto případě klíčové slovo Throw vyvolá řetězec zprávy, ale je to přítomnost klíčového slova Throw, která generuje ukončovací chybu, pokud není zadán parametr Path. Výraz, který následuje za hodem, je volitelný.

function Get-XMLFiles
{
  param ($path = $(throw "The Path parameter is required."))
  dir -path $path\*.xml -recurse |
    sort lastwritetime |
      ft lastwritetime, attributes, name  -auto
}

VIZ TAKÉ

about_Break

about_Continue

about_Scopes

about_Trap

about_Try_Catch_Finally