关于 Functions 高级版

简短说明

介绍高级函数,这些函数是使用脚本创建 cmdlet 的一种方法。

详细说明

cmdlet 是参与 PowerShell 管道语义的单个命令。 这包括二进制 cmdlet、高级脚本函数、CDXML 和工作流。

高级函数允许创建作为 PowerShell 函数编写的 cmdlet。 使用高级函数可以更轻松地创建 cmdlet,而无需编写和编译二进制 cmdlet。 二进制 cmdlet 是以 .NET 语言(如 C#)编写的 .NET 类。

高级函数使用 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 用来处理传递给 cmdlet 的数据的 ProcessingRecord 方法。 about_Functions_Advanced_Methods主题中介绍了此块以及 Begin 和 End 块。

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

  • 当字符串数组绑定到布尔参数时,高级函数参数绑定不会引发异常。
  • ValidateSet 属性和 ValidatePattern 属性不能传递命名参数。
  • 高级函数不能在事务中使用。

另请参阅

about_Functions

about_Functions_Advanced_Methods

about_Functions_Advanced_Parameters

about_Functions_CmdletBindingAttribute

about_Functions_OutputTypeAttribute