共用方式為


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)