目前,我正在尝试使用 ValidateSet 属性声明:
function cmdlet {
param(
[Parameter(Mandatory = $True, Position = 0)]
[ValidateSet("option_1", "option_2", "option_3")]
[string[]] $options
)
...
}
使用它,我可以完成一个单位长度参数,即
> cmdlet <TAB> -> cmdlet option_1
但是为了获得更多选项以完成制表符(或者,确实正确解析),我必须将前面的参数括在引号中,即
> cmdlet option_1<TAB> -> cmdlet option_1
(无法完成制表符)
> cmdlet "option_1",<TAB><TAB> -> cmdlet "option_1",option_2
(正确执行)
> cmdlet option_1,option_2<ENTER>
cmdlet : Cannot validate argument on parameter 'options'. The argument "o" does not belong to the set "option_1,option_2,option_3" specified by the ValidateSet attribute.
Supply an argument that is in the set and then try the command again.
At line:1 char:8
+ cmdlet option_1,option_2
+ ~~~~~~
+ CategoryInfo : InvalidData: (:) [cmdlet], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,cmdlet
这显然不太理想。要么我希望制表符完成为我将参数包装在引号中(或者根本不需要它们,但我想这会更难)。
非常感谢任何帮助。