about_Functions_Advanced
主題
about_Functions_Advanced
簡短描述
介紹與 Cmdlet 作用類似的進階函數。
完整描述
進階函數讓您可以撰寫函數來執行類似於使用 Cmdlet 所執行的作業。當您想要快速撰
寫出函數,而不想使用 Microsoft .NET Framework 語言撰寫編譯的 Cmdlet 時,進
階函數就很有用。如果想要限制編譯的 Cmdlet 的功能,或者想要撰寫與編譯的 Cmdlet
類似的函數,進階函數也很有用。
編寫編譯的 Cmdlet 和進階函數之間有所區別。編譯的 Cmdlet 是 .NET Framework
類別,必須以 C# 之類的 .NET Framework 語言撰寫。相反地,進階函數是以 Windows
PowerShell 指令碼語言所撰寫,其方法與撰寫其他的函數或指令碼區塊相同。
進階函數會使用 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 ("您好" + $Name + "!")
}
}
Parameter 屬性可用來宣告函數的參數。這個屬性可單獨使用,也可以與 Alias 屬性
或與其他數個參數驗證屬性搭配使用。
如需如何宣告參數 (包括在執行階段所新增的動態參數) 的詳細資訊,請參閱
about_Functions_Advanced_Parameters。
前述函數的實際工作會在 Process 區塊中執行,該區塊等同於 ProcessingRecord 方
法,後者則是由編譯的 Cmdlet 用來處理傳遞給 Cmdlet 的資料。如需這個區塊以及
Begin 和 End 區塊的說明,請參閱 about_Functions_Advanced_Methods 主題。
進階函數與編譯的 Cmdlet 之間有下列區別:
- 當字串陣列繫結到布林值參數時,進階函數的參數繫結不會擲回例外狀況。
- ValidateSet 屬性和 ValidatePattern 屬性都無法傳遞具名參數。
- 進階函數無法用於交易。
請參閱
about_Functions_Advanced_CmdletBindingAttribute
about_Functions_Advanced_Methods
about_Functions_Advanced_Parameters
Windows PowerShell Cmdlet
(https://go.microsoft.com/fwlink/?LinkID=135279)