主题
    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 ("Hello " + $Name + "!") }
        }


    函数的参数通过 Parameter 属性来声明。此属性可单独使用,也可与 Alias 属性或几个
    其他参数验证属性结合使用。有关如何声明参数(包括在运行时添加的动态参数)的
    详细信息,请参阅 about_Functions_Advanced_Parameters。
 

    上一函数的实际工作是在 Process 块中执行的,这种方法等效于已编译 cmdlet 所用的 
    ProcessingRecord 方法,已编译 cmdlet 使用该方法处理传递给该 cmdlet 的数据。
    about_Functions_Advanced_Methods 主题对 Process 块以及 Begin 和 End 块进行了
    说明。


    高级函数在以下方面与已编译 cmdlet 有所不同:

        - 在将字符串数组绑定到布尔参数时,高级函数参数捆绑不会引发异常。

        - ValidateSet 属性和 ValidatePattern 属性不能传递命名参数。

        - 事务中不能使用高级函数。

   
另请参阅
    about_Functions_Advanced_CmdletBindingAttribute 
    about_Functions_Advanced_Methods  
    about_Functions_Advanced_Parameters 
    Windows PowerShell Cmdlets (https://go.microsoft.com/fwlink/?LinkID=135279)




目录