主题 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)