about_Functions_Advanced

应用到: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

主题

about_Functions_Advanced

简短说明

引入与 cmdlet 行为类似的高级函数。

详细说明

高级函数允许你编写可执行类似于使用 cmdlet 执行的操作的函数。当你希望快速编写函数而无需使用 Microsoft .NET Framework 语言编写已编译的 cmdlet 时,高级函数非常有用。当你希望限制已编译的 cmdlet 的功能或希望编写类似于已编译的 cmdlet 的函数时,这些函数也非常有用。

创作已编译的 cmdlet 和高级函数之间有一个区别。已编译的 cmdlet 是 .NET Framework 类,必须使用 .NET Framework 语言(例如 C#)编写。相反,高级函数使用 Windows PowerShell® 脚本语言编写,其方法与编写其他函数或脚本块相同。

高级函数使用 CmdletBinding 属性将它们标识为行为与 cmdlet 类似的函数。CmdletBinding 属性类似于 Cmdlet 属性,该属性在已编译的 cmdlet 类中用于将该类标识为 cmdlet。有关此属性的详细信息,请参阅 about_Functions_CmdletBindingAttribute。

以下示例显示可接受名称然后使用所提供的名称打印问候语的函数。另请注意,此函数定义包含动词和(发送)和名词(问候语)对的名称,该对类似于已编译的 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 方法。about_Functions_Advanced_Methods 主题中介绍了此块以及 Begin 和 End 块。

高级函数在以下方面不同于已编译的 cmdlet:

- 当字符串数组绑定到 Boolean 参数时,高级函数参数绑定不会引发异常。

- ValidateSet 属性和 ValidatePattern 属性无法传递命名参数。

- 无法在事务中使用高级函数。

另请参阅

about_Functions

about_Functions_Advanced_Methods

about_Functions_Advanced_Parameters

about_Functions_CmdletBindingAttribute

about_Functions_OutputTypeAttribute

Windows PowerShell Cmdlet (https://go.microsoft.com/fwlink/?LinkID=135279)