小编Gar*_*n82的帖子

函数参数位置突然表现得很奇怪

代码:

这个例子说明了我的意思:

Function test{
    param(
    [parameter(Position = 0, ValueFromPipeline)]
    [string]$Param0,
    [parameter(Position = 1)]
    [ArgumentCompletions("Param1_Opt1", "Param1_Opt2")]
    [Array]$Param1 = ('Param1_Opt3', 'Param1_Opt4'),
    [switch]$NoHeader
    )
    "This is $Param0"
    "Header :$Param1"
}
Run Code Online (Sandbox Code Playgroud)

我的问题:

很长一段时间以来,我一直依赖所有函数中的参数位置,今天在编写函数时,突然它停止了我使用它们的方式。上面的test函数演示了这个问题。

如果参数具有参数Position = 0属性并且也具有该ValueFromPipeline 属性。当它用于管道时。具有Position属性的下一个参数占据其位置。这也意味着接下来的参数ArgumenCompletions,例如"Param1_Opt1"/ "Param1_Opt2" get 建议。

但我根本没有得到这种行为。

Test "This is For Parameter Zero" "This is For Parameter One"

---- Ouput -----
This is For Parameter Zero
This is For Parameter One
Run Code Online (Sandbox Code Playgroud)

上面的代码按预期工作,第一个字符串正确分配给Param0,第二个字符串正确分配给Param1,更多Param1参数建议有效,但以下内容失败并出现错误,并且管道字符串被分配给Param1 …

powershell pipeline parameter-passing positional-parameter

2
推荐指数
1
解决办法
50
查看次数