如何将数组作为参数传递给另一个脚本?

64

由于某些原因,似乎我无法将字符串数组作为参数传递给脚本块。我在这里错了什么?

我的脚本是从另一个脚本调用的:

param(
    [parameter(Mandatory=$true)]
    [string[]]$myarr
)

foreach ($elem in $myarr){
    $elem
}

我从另一个脚本中调用它:

 $myarr = @("111", "222")
 start-job -filepath myscript.ps1 -arg $myarr

我只得到了数组中的第一个元素 - "111"。

1个回答

87

可以尝试以下方式:

start-job -filepath myscript.ps1 -arg (,$myarr)

-ArgumentList接受一个参数列表/数组。因此,当您提供-arg $myarr时,就好像将数组的元素作为参数传递一样。因此,您需要强制PowerShell将其视为一个单独的参数,即一个数组。


是的,它有效。你能解释一下为什么吗? :) 据我理解,括号中的逗号表示它实际上是一个包含两个子数组的数组,对吗? - mishkin
8
@Mishkin - 解释一下,-ArgumentList 接受一个参数列表/数组。因此,当你输入 -arg $myarr 时,就好像将数组的元素作为参数传递一样。所以你需要强制 PowerShell 将其视为一个单独的参数,也就是一个数组。 - manojlds
你如何传递数组和另一个变量?-arg(,$myarr, $singleValue)。例如,$singleValue = "x"。 - Taco_Buffet
1
当尝试传递单个数组参数时,问题才会发生。当您传递一个数组和另一个参数时,使用逗号隐式创建另一个数组。例如,在-arg $array, $value中,$array,$value表达式是一个数组,您可以通过在命令行上评估它来查看它。($arr,5)[0]将打印出$arr($arr,5)[1]将打印出5 - Tamir Daniely

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接