我一直试图解决这个问题。我已经看过其他文章,并尝试了一切,但我没有得到任何地方。我试图将一个数组作为参数传递给另一个PS脚本。这是我正在尝试的:
$IPArray = Get-Content C:\ListofIps.txt
Invoke-Command -Computername $server -Credential $cred -FilePath "C:\script.ps1" -ArgumentList (,$IPArray)
$ IPArray中的5个值未传递给我调用的脚本。
先谢谢你们,伙计们,我非常感谢你们给予的任何帮助......
答案 0 :(得分:11)
使用:
... -ArgumentList (,$IPArray)
因为ArgumentList
参数需要一个数组,所以你已经正确地注意到你需要将数组包装在另一个数组中。但是,此方案中的正确语法(指定参数值)是使用分组表达式()
来创建嵌套数组。
答案 1 :(得分:0)
这是一个老问题,但是我要在答案上重新迭代@keith-hill - 在数组声明的开头添加一个逗号(即使包含现有数组)。
这很愚蠢,但我再次回答是因为我尝试了所有替代方案,这是唯一有效的方法 - 即使使用PowerShell 3.0+也是如此。您可以使用#require
来获取至少v3.0 +的任何内容,但除非您执行@ keith-hill建议的操作,否则一切都无法工作 - 即使它是一个数组,并且参数是一个数组, PS在这种情况下很糟糕(我喜欢PS)...做他说的话(发帖没有工作,很抱歉,但工作答案更好):
\
... -ArgumentList (,$IPArray)
这没有任何意义,但这有效。向PS团队请求放弃炸弹,但如果我没有这样做,我的剧本将是无效的。而且我已经成为了#34;脚本专家......所以你走了。
答案 2 :(得分:0)
如果你只是想传递一个数组,你可以把 $args 变量本身当作远程命令中的数组,你得到的结果与将它传递为 (, $IPArray) 然后在脚本块作为 $args[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)