繁体   English   中英

使用 Invoke-Command 将数组传递给另一个脚本

[英]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 团队投下一颗炸弹,但如果我没有这样做,我的脚本将是无效的。 我已经成为“脚本编写者”……所以你开始吧。

这是100%正确的-可能不是该线程的启动方式,但对我非常有用。

变量$ Content包含372行文本,应将其发送到远程计算机:

调用命令-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM