共用方式為


about_Throw

適用於: Windows PowerShell 2.0, Windows PowerShell 3.0

主題

about_Throw

簡短描述

描述可產生終止錯誤的 Throw 關鍵字。

詳細描述

Throw 關鍵字會導致終止錯誤。您可以使用 Throw 關鍵字停止處理命令、函式或指令碼。

例如,您可以在 If 陳述式的指令碼區塊中使用 Throw 關鍵字,回應 Try-Catch-Finally 陳述式之 Catch 區塊中的條件。您也可以在參數宣告中使用 Throw 關鍵字,以製作必要的函式參數。

Throw 關鍵字可以擲回任何物件,例如使用者訊息字串或造成錯誤的物件。

語法

Throw 關鍵字的語法如下:

        throw [<expression>]

Throw 語法中的運算式是選擇性的。當 Throw 陳述式未出現在 Catch 區塊中,而且不包含運算式時,它會產生 ScriptHalted 錯誤。

        C:\PS> throw

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

如果在 Catch 區塊中使用 Throw 關鍵字但不帶運算式,就會再次擲回目前的 RuntimeException。如需詳細資訊,請參閱 about_Try_Catch_Finally。

擲回字串

Throw 陳述式中的選擇性運算式可以是字串,如下例所示:

        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) [], RuntimeException
            + FullyQualifiedErrorId : This is an error.

擲回其他物件

運算式也可以是擲回物件的物件,被擲回的物件代表 PowerShell 處理序,如下例所示:請在這裡插入區段主體。

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

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

您可以使用 $error 自動變數之 ErrorRecord 物件的 TargetObject 屬性來檢查錯誤。

        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

也可以擲回 ErrorRecord 物件或 Microsoft .NET Framework 例外狀況。下例使用 Throw 關鍵字擲回 System.FormatException 物件。

        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.

產生的錯誤

Throw 關鍵字會產生 ErrorRecord 物件。ErrorRecord 物件的 Exception 屬性包含 RuntimeException 物件。ErrorRecord 物件和 RuntimeException 物件的剩餘部分會因 Throw 關鍵字擲回的物件而異。

RunTimeException 物件包裝在 ErrorRecord 物件中,且 ErrorRecord 物件會自動儲存在 $Error 自動變數中。

使用 THROW 建立必要的參數

您可以使用 Throw 關鍵字製作必要的函式參數。

這是使用 Parameter 關鍵字的 Mandatory 參數的替代方式。當您使用 Mandatory 參數時,系統會提示使用者輸入必要的參數值。當您使用 Throw 關鍵字時,命令會停止並顯示錯誤記錄。

例如,參數子運算式中的 Throw 關鍵字讓 Path 參數成為函式的必要參數。

在此案例中,Throw 關鍵字會擲回訊息字串,但如果未指定 Path 參數,就會出現產生終止錯誤的 Throw 關鍵字。跟在 Throw 後面的運算式是選擇性的。

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

另請參閱

about_Break

about_Continue

about_Scope

about_Trap

about_Try_Catch_Finally