about_Functions_Advanced

简短说明

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

长说明

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

使用高级函数,你可以创建编写为 PowerShell 函数的 cmdlet。 高级功能使创建 cmdlet 变得更加容易,无需编写和编译二进制 cmdlet。 二进制 cmdlet 是用 .NET 语言(例如 C#)编写的 .NET 类。

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

函数的参数是在 param() 语句中声明的变量。 可以单独使用可选 [Parameter()] 属性,也可以与 [Alias()] 属性或任何参数验证属性结合使用。 有关如何声明参数的详细信息,请参阅 about_Functions_Advanced_Parameters

以下示例显示了一个函数,该函数接受一个名称,然后使用提供的名称输出问候语。 另请注意,此函数定义的名称包含动词 (Send) 和名词 (Greeting) 对,就像编译的 cmdlet 的动词-名词对一样。 但是,函数不是必须有动词-名词名称。

function Send-Greeting
{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true)]
        [string] $Name
    )

    process
    {
        Write-Host ("Hello " + $Name + "!")
    }
}

此函数在 process 块中执行工作,这等效于编译的 cmdlet 中使用的 ProcessingRecord 方法。 about_Functions_Advanced_Methods 中介绍了 process 块和其他命名块。

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

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

另请参阅