共用方式為


關於函式進階

簡短描述

介紹使用腳本建立 Cmdlet 的進階函式。

詳細描述

Cmdlet 是參與 PowerShell 管線語意的單一命令。 這包括二進位 Cmdlet、進階腳本函式、CDXML 和工作流程。

進階函式可讓您建立以PowerShell函式撰寫的 Cmdlet。 進階函式可讓您更輕鬆地建立 Cmdlet,而不需要撰寫和編譯二進位 Cmdlet。 二進位 Cmdlet 是以 .NET 語言撰寫的 .NET 類別,例如 C#。

進階函式會 CmdletBinding 使用 屬性將它們識別為類似 Cmdlet 的函式。 屬性 CmdletBinding 類似於在編譯的 Cmdlet 類別中使用的 Cmdlet 屬性,以將類別識別為 Cmdlet。 如需此屬性的詳細資訊,請參閱 about_Functions_CmdletBindingAttribute

下列範例顯示接受名稱的函式,然後使用提供的名稱列印問候語。 另請注意,此函式會定義名稱,其中包含動詞 (Send) 和名詞 (Greeting) 配對,例如已編譯 Cmdlet 的動詞名詞組。 不過,函式不需要有動詞名詞名稱。

function Send-Greeting
{
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$true)]
        [string] $Name
    )

    Process
    {
        Write-Host ("Hello " + $Name + "!")
    }
}

函式的參數是使用Parameter屬性來宣告。 這個屬性可以單獨使用,也可以與 Alias 屬性或數個其他參數驗證屬性結合。 如需如何宣告參數的詳細資訊, (包括運行時間) 新增的動態參數,請參閱 about_Functions_Advanced_Parameters

上一個函式的實際工作是在 Process 區塊中執行,相當於已編譯 Cmdlet 所使用的 ProcessingRecord 方法,以處理傳遞至 Cmdlet 的數據。 此區塊與 Begin 和 End 區塊一起描述於 about_Functions_Advanced_Methods 主題中。

進階函式與已編譯的 Cmdlet 不同,方式如下:

  • 當字串陣列系結至布爾參數時,進階函式參數係結不會擲回例外狀況。
  • ValidateSet 屬性和 ValidatePattern 屬性無法傳遞具名參數。
  • 進階函式不能用於交易中。

另請參閱

about_Functions

about_Functions_Advanced_Methods

about_Functions_Advanced_Parameters

about_Functions_CmdletBindingAttribute

about_Functions_OutputTypeAttribute