![](/img/trans.png)
[英]Invoke-Command with Computers array, access single array element inside scriptblock
[英]Passing array to another script with Invoke-Command
我一直在想办法解决这个问题。 我已经看过其他文章并尝试了所有方法,但我一无所获。 我试图将一个数组作为参数传递给另一个 PS 脚本。 这是我正在尝试的:
$IPArray = Get-Content C:\ListofIps.txt
Invoke-Command -Computername $server -Credential $cred -FilePath "C:\script.ps1" -ArgumentList (,$IPArray)
$IPArray 中的 5 个值没有传递给我调用的脚本。
提前致谢,伙计们,我真的很感谢你能提供的任何帮助......
采用:
... -ArgumentList (,$IPArray)
因为ArgumentList
参数需要一个数组,您已经正确地注意到您需要将该数组包装在另一个数组中。 但是,此场景中的正确语法(指定参数值)是使用分组表达式()
来创建嵌套数组。
这是一个老问题,但我将在答案中重复@keith-hill——在数组声明的开头添加一个逗号(即使包含现有数组)。
这很愚蠢,但我再次回答,因为我尝试了所有替代方法,这是唯一有效的方法——即使使用 PowerShell 3.0+。 您可以将#require
用于至少 v3.0+ 的任何内容,但除非您按照 @keith-hill 的建议进行操作,否则没有任何效果——即使它是一个数组,并且参数是一个数组,PS 在这种情况下很糟糕(并且我爱 PS)...按照他说的做(发布无效,很抱歉,但工作答案更好):\\ ... -ArgumentList (,$IPArray)
这没有意义,但确实有效。 向 PS 团队投下一颗炸弹,但如果我没有这样做,我的脚本将是无效的。 我已经成为“脚本编写者”……所以你开始吧。
调用命令-scriptblock {Param($ content); $ content.count} -ArgumentList @($ content)-ComputerName CAT0005
1个
调用命令-scriptblock {Param($ content); $ content.count} -ArgumentList @(,$ content)-ComputerName CAT-0005
372
如果您只是尝试传递一个数组,则可以将 $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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.