about_Functions_Advanced

簡短描述

介紹使用腳本建立 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 用來處理傳遞至 Cmdlet 之數據的 ProcessingRecord 方法。 此區塊以及 beginend 區塊會在 about_Functions_Advanced_Methods 主題中說明。

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

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

另請參閱