【问题标题】:Invoke-command -ArgumentList parameter syntaxInvoke-command -ArgumentList 参数语法
【发布时间】:2014-05-20 13:25:09
【问题描述】:

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

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

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

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

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

谢谢,

格伦

【问题讨论】:

    标签: powershell powershell-remoting


    【解决方案1】:

    您必须了解为什么在第一种情况下需要一元逗号,才能理解为什么在第二种情况下不需要。

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

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

    总结一下:你应该可以这样运行:

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

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

    【讨论】:

      【解决方案2】:

      试试这个方法:

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

      【讨论】:

        【解决方案3】:

        另一个...

        $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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-04-27
          • 1970-01-01
          • 1970-01-01
          • 2018-03-21
          • 2015-03-29
          • 1970-01-01
          • 2011-05-12
          相关资源
          最近更新 更多