7

我一直试图弄清楚这一点。我已经看过其他文章并尝试了所有方法,但我没有得到任何结果。我正在尝试将数组作为参数传递给另一个 PS 脚本。这是我正在尝试的:

$IPArray = Get-Content C:\ListofIps.txt
Invoke-Command -Computername $server -Credential $cred -FilePath "C:\script.ps1" -ArgumentList (,$IPArray)

$IPArray 中的 5 个值没有传递给我调用的脚本。

提前谢谢你们,我真的很感激你们能给我的任何帮助......

4

3 回答 3

13

利用:

... -ArgumentList (,$IPArray)

因为该ArgumentList参数需要一个数组,所以您已经正确指出您需要将数组包装在另一个数组中。但是,在这种情况下(指定参数值)的正确语法是使用分组表达式()来创建嵌套数组。

于 2013-07-10T22:12:19.833 回答
1

这是一个老问题,但我将在答案上重新迭代@keith-hill——在数组声明的开头添加一个逗号(即使包含现有数组)。

这很愚蠢,但我再次回答,因为我尝试了所有替代方案,这是唯一有效的方法——即使使用 PowerShell 3.0+。您可以使用#require至少从 v3.0+ 开始的任何内容,但除非您按照@keith-hill 的建议进行操作,否则什么都不会起作用——即使它是一个数组,而且参数是一个数组,在这种情况下 PS 很烂(我喜欢PS)...照他说的做(发帖没有用,很抱歉,但有效的答案更好):\ ... -ArgumentList (,$IPArray)

这没有任何意义,但这是有效的。把炸弹交给 PS 团队,但如果我没有这样做,我的剧本将是无效的。我已经成为“脚本专家”......所以你去吧。

于 2017-07-12T00:00:09.817 回答
0

如果您只是尝试传递一个数组,您可以将 $args 变量本身视为远程命令中的数组,并且您将获得与将其作为 (, $IPArray) 传递然后在脚本块中以 $ 访问该数组相同的结果参数 [0]。我没有测试这是否适用于多个数组。

也就是说,

$MyScriptBlock = { $args | % { Do-Stuff -Thing $PSItem } }
Invoke-Command -Session $MySession -ScriptBlock $MyScriptBlock -ArgumentList $IPArray

将返回与

$MyScriptBlock = { $args[0] | % { Do-Stuff -Thing $PSItem } }
Invoke-Command -Session $MySession -ScriptBlock $MyScriptBlock -ArgumentList (,$IPArray)
于 2021-05-01T08:10:27.207 回答