PowerShell工作流和CmdletBinding属性

时间:2014-03-20 14:30:32

标签: powershell workflow

在PowerShell高级函数中,[CmdletBinding()]属性用于添加有用的元数据,并确保该函数的作用类似于已编译的PowerShell cmdlet。可以使用$PSCmdlet自动变量访问其中一些有用的信息。

在PowerShell 工作流中,[CmdletBinding()]属性可以在工作流定义中声明(不会收到错误),但在工作流中使用$PSCmdlet会产生以下错误消息:

At C:\Demo\Workflow - Demo 04.ps1:11 char:5
+     $PSCmdlet;
+     ~~~~~~~~~
The variable 'PSCmdlet' cannot be used in a script workflow.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : VariableNotSupportedInWorkflow

我的问题归结为:在PowerShell工作流程中使用[CmdletBinding()]属性有什么好处吗?

1 个答案:

答案 0 :(得分:1)

在大多数情况下,CmdletBinding属性对工作流程没有太大作用。工作流模拟cmdlet,因为它们不会绑定未知参数,因此[CmdletBinding()]不会更改参数绑定的任何方面。

您可以使用[CmdletBinding(DefaultParameterSetName='DefaultSet')]指定默认参数集,这可能很有用。

请注意,如果使用Parameter属性,函数/工作流将隐式使用cmdlet绑定。工作流无法利用您可以使用Parameter属性的所有内容,例如接受管道中的值将没有用,因为工作流程无法指定过程块。您仍然可以指定可能有用的参数集,位置参数和帮助消息。