主題 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)