0
目前,我試圖用ValidateSet屬性聲明像這樣:如何獲取Powershell選項卡完成數組參數?
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
這顯然不太理想。要麼我希望tab完成將引用中的參數封裝起來(或者根本不要求它們,但我想這會更困難)。
非常感謝任何幫助。
您不必將第一個參數換成引號,只需在第一次完成後添加逗號,然後再次按Tab鍵以添加更多值。無論引號如何,您的功能對我而言都毫無問題。不知道爲什麼「o」被傳遞。我會重新啓動控制檯並重試。 – 2013-05-08 12:49:12