【发布时间】:2013-07-08 19:11:43
【问题描述】:
我一直在努力解决这个问题。我已经看过其他文章并尝试了所有方法,但我没有得到任何结果。我正在尝试将数组作为参数传递给另一个 PS 脚本。这是我正在尝试的:
$IPArray = Get-Content C:\ListofIps.txt
Invoke-Command -Computername $server -Credential $cred -FilePath "C:\script.ps1" -ArgumentList (,$IPArray)
$IPArray 中的 5 个值没有传递给我调用的脚本。
在此先感谢各位,非常感谢您提供的任何帮助...
【问题讨论】:
-
为什么在 $IPArray 之前有一个逗号,为什么要把它放在括号里?如果您只想将 $IPArray 作为参数列表传递,请使用
-ArgumentList $IPArray。 -
感谢您的快速回复,阿迪。根据this thread,-ArgumentList 需要括号和逗号才能将参数视为数组。然而,我尝试了两种方式,但都没有成功。
-
script.ps1 是否有一个 param() 语句来接受参数?尝试通过将以下内容放入 $server 上的 test.ps1 文件中来进行测试: param([string[]$IPs) $IPS |写输出这至少应该告诉你参数是否被目标脚本正确传递和接受。
-
看起来就是这样,JBSmith!我之前尝试过 param 语句,但没有意识到它必须是第二个脚本中的第一个可执行行。这让我得到了我需要的东西,但我什至必须将 $IPArray 作为 -ArgumentType 传递吗?调用 test.ps1 脚本时,它不应该作为全局变量在范围内吗?
-
$IPArray 在您当前的本地会话中处于全局范围内。但是当您运行 Invoke-Command 时,您将在远程计算机上启动一个新的、全新的会话。那台计算机中没有本地会话中的任何本地变量、函数、模块等。在 powershell 版本 3 中,有一个名为 using 的新变量“范围”,可以将本地变量传递给远程会话。因此,您可以像这样在脚本中指定变量:“$using:IPArray”。但在版本 2 中,您必须使用 -ArgumentList 将本地变量获取到远程机器。
标签: arrays powershell invoke-command