Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
验证任意数量的PowerShell脚本参数_Powershell - Fatal编程技术网

验证任意数量的PowerShell脚本参数

验证任意数量的PowerShell脚本参数,powershell,Powershell,在PowerShell中,可以验证传递给脚本的参数,还可以启用自动完成,如下所示: myscript.ps1: param([Parameter(Mandatory=$false)][String][ValidateSet('abc', 'def', 'ghi')] $arg

在PowerShell中,可以验证传递给脚本的参数,还可以启用自动完成,如下所示:

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;很高兴听到这有帮助。