Invoke-command -ArgumentList参数语法

时间:2014-05-20 13:25:10

标签: powershell powershell-remoting

我尝试将多个csv导入的列表添加到远程执行的PS脚本中。当我使用以下命令仅传递一个列表时,它工作正常:

Invoke-Command -filepath $createSAPSPath -ConnectionUri $uri -Credential $credential -ArgumentList (,$accountsList)

多个列表对象的正确语法是什么?我试过了:

Invoke-Command -filepath $createSAPSPath -ConnectionUri $uri -Credential $credential -ArgumentList (,$accountsList),(,$groupsList)

但它似乎不起作用......

谢谢,

格伦

3 个答案:

答案 0 :(得分:7)

你必须意识到为什么你需要在第一种情况下使用一元逗号,理解为什么在第二种情况下不需要它。

参数-ArgumentList采用Object[]参数类型。如果要传递单个集合,则需要阻止PowerShell将单个参数(恰好是集合)视为传递给此参数的参数集合。

如果您已经传递了集合(例如$AnyObject, $EvenCollection),则无论单个对象的类型如何,PowerShell都会执行用户通常期望的操作:将第一个集合传递给第一个参数,将第二个集合传递给第二个参数。

总结一下:你应该能够像这样运行:

Invoke-Command -filepath $createSAPSPath -ConnectionUri $uri -Credential $credential -ArgumentList $accountsList, $groupList

...并获得预期的结果。

答案 1 :(得分:3)

以这种方式尝试:

$AccountList = 'Account1','Account2'
$GroupList    = 'Group1','Group2'

invoke-command {$args[0];'*****';$args[1]} -ArgumentList (,$AccountList,$GroupList) 

Account1
Account2
*****
Group1
Group2

答案 2 :(得分:0)

另一个...

$myArrList = [System.Collections.ArrayList]@()
$myArrList2 = [System.Collections.ArrayList]@()

//add your elements here

$arguments = @()
$arguments += (,$myArrList)
$arguments += (,$myArrList2)

$j = Start-Job -Name $('job-' +$env:COMPUTERNAME) -ScriptBlock $scriptBlockJob -ArgumentList $arguments