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 方法。 此區塊以及 begin
和 end
區塊會在 about_Functions_Advanced_Methods 主題中說明。
進階函式與已編譯的 Cmdlet 不同,方式如下:
- 當字串陣列系結至 布爾 參數時,進階函式參數係結不會擲回例外狀況。
- 屬性
ValidateSet
和ValidatePattern
屬性無法傳遞具名參數。 - 進階函式不能用於交易。