在PowerShell中可以验证传递给脚本的参数,还可以启用自动完成功能,如下所示:
myscript.ps1
:
param([Parameter(Mandatory=$false)][String][ValidateSet('abc',
'def',
'ghi')] $argument
)
但这只会为第一个参数启用自动完成功能。我希望“自动完成”参数的数量可以是任意的。
因此,键入后:
PS C:\> .\myscript.ps1 def
(末尾有空白)和PS C:\> .\myscript.ps1 def abs
如何在param(...)
部分进行编码?
答案 0 :(得分:3)
如果您确实希望将值作为单个参数传递,并用空格分隔 ,请使用ValueFromRemainingArguments
参数属性:
param(
[Parameter(ValueFromRemainingArguments)]
[ValidateSet('abc', 'def', 'ghi')]
[string[]] $argument
)
请注意,$argument
现在是值的数组,PowerShell在其中为您收集所有位置参数。
潜在的不利之处在于,这会使所有个位置参数接受验证,因此,如果您还需要传递其他参数,则必须在参数前面加上参数名称(例如, -foo bar
。
因此,请考虑改用单个显式数组值参数:
param(
[ValidateSet('abc', 'def', 'ghi')]
[string[]] $argument
)
这样,$argument
将以,
作为分隔符传递时,将接收多个值 ,除了制表符补全第一个值外,键入后每个值都会另外一个,
也可以完成制表符。
./myscript a<tab> # -> ./myscript abc
./myscript abc, d<tab< # -> ./myscript abc, def