使用没有形式参数的CmdletBinding

时间:2015-07-20 12:03:36

标签: powershell

在对another question发表评论之后,我尝试将CmdletBinding添加到函数中。这是一个玩具示例

function example {
  [CmdletBinding()]Param()
  $args
}

但是试着用它我得到了:

> example foo
example : A positional parameter cannot be found that accepts argument 'foo'.
At line:1 char:1
+ example foo
+ ~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [example], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,example

我应该修复什么才能使该函数与传递给它的任何参数一起使用?

1 个答案:

答案 0 :(得分:3)

您需要声明一个参数以接受"foo"块中的Param()Here's the manual on advanced parameters。在您的情况下,您希望参数接受与任何其他参数(无)不匹配的任何值,因此您使用ValueFromRemainingArguments参数设置为true来声明它。

function example {
    [CmdletBinding()]
    Param(
        [parameter(ValueFromRemainingArguments=$true)][String[]] $args
    )
    $args
}

如何使用的示例:

PS K:\> example foo bar hum
foo
bar
hum