验证任意数量的PowerShell脚本参数
在PowerShell中,可以验证传递给脚本的参数,还可以启用自动完成,如下所示:验证任意数量的PowerShell脚本参数,powershell,Powershell,在PowerShell中,可以验证传递给脚本的参数,还可以启用自动完成,如下所示: myscript.ps1: param([Parameter(Mandatory=$false)][String][ValidateSet('abc', 'def', 'ghi')] $arg
myscript.ps1
:
param([Parameter(Mandatory=$false)][String][ValidateSet('abc',
'def',
'ghi')] $argument
)
但这只会启用第一个参数的自动完成。我希望“自动完成”参数的数量是任意的
因此,键入后:
(末尾附加空格)和PS C:\>。\myscript.ps1 def
- 按tab键,我想再次自动完成可能的参数
PS C:\>。\myscript.ps1 def abs
如何在
参数(…)
部分对此进行编码?如果要将值作为单独的参数传递,并用空格分隔,请使用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
/myscript a#->。/myscript abc
./myscriptabc,d./myscriptabc,def
我的荣幸,@user69453;很高兴听到这有帮助。