这个例子说明了我的意思:
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 …