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)