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