現在、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
これは明らかに理想的ではありません。タブ補完で引数を引用符で囲みたいと思います(または、それらをまったく必要としないようにしますが、それは難しいと思います)。
どんな援助も大歓迎です。