关于如何使用来自另一个PS脚本的参数调用一个PS脚本已经存在一些问题了 Powershell: how to invoke a second script with arguments from a script
但是如果我有第一个带有多个位置参数的脚本,我就会陷入困境。
testpar2.ps1调用testpars.ps1
#$arglist=(some call to database to return argument_string)
$arglist="first_argument second_argument third_argument"
$cmd=".\testpars.ps1"
& $cmd $arglist
$ arglist变量应该用数据库中的字符串填充。该字符串包含testpar.ps1的参数。
testpars.ps1看起来像
echo argument1 is $args[0]
echo argument2 is $args[1]
echo arugment3 is $args[3]
# some_command_call $arg[0] $arg[1] $arg[2]
这个参数应该以某种方式在testpars.ps1中使用,比如将它们路由到某个命令。
但是当我运行testpars2.ps1时,我得到了
argument1 is first_argument second_argument third argument
argument2 is
arugment3 is
它认为它是一个参数,而不是它们的列表。
答案 0 :(得分:1)
如您所见,当您将字符串传递给函数时,PowerShell会将其视为单个值。这通常是好的,因为它避免了CMD中不断引用和取消引用字符串的问题。要获得单独的值,您需要将split()
字符串放入数组中。
$arglistArray = $arglist.split()
现在你有一个包含三个字符串的数组,但它们仍然作为一个参数传递。 PowerShell有一个名为splatting的想法,可以将值数组作为多个参数传递。要使用splatting,请在参数列表中将$
替换为@
。
& $cmd @arglistArray
有关splatting的更多信息,请键入Get-Help about_Splatting