在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()]
属性有什么好处吗?
答案 0 :(得分:1)
在大多数情况下,CmdletBinding属性对工作流程没有太大作用。工作流模拟cmdlet,因为它们不会绑定未知参数,因此[CmdletBinding()]
不会更改参数绑定的任何方面。
您可以使用[CmdletBinding(DefaultParameterSetName='DefaultSet')]
指定默认参数集,这可能很有用。
请注意,如果使用Parameter属性,函数/工作流将隐式使用cmdlet绑定。工作流无法利用您可以使用Parameter属性的所有内容,例如接受管道中的值将没有用,因为工作流程无法指定过程块。您仍然可以指定可能有用的参数集,位置参数和帮助消息。