共用方式為


about_Functions_Advanced

簡短描述

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

詳細描述

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

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

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

函式的參數是在 param() 語句中宣告的變數。 您可以單獨使用選擇性的 [Parameter()] 屬性,或與 [Alias()] 屬性或任何參數驗證屬性搭配使用。 如需如何宣告參數的詳細資訊,請參閱 about_Functions_Advanced_Parameters

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

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

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

此函式會在 process 區塊中執行工作,這相當於編譯 Cmdlet 中使用的 ProcessingRecord 方法。 process 區塊以及其他具名區塊的描述可以在 about_Functions_Advanced_Methods中找到。

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

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

另請參閱