Powershell调用命令$ input

时间:2018-11-21 07:49:26

标签: powershell invoke-command

我遇到了麻烦。有人可以帮助我吗? 这是我的代码:

$A = '123'
$servers = 'computer1'
$Properties = [ordered]@{A = $A
                          servers = $servers     
                        }

$MyObject = New-Object -TypeName PSObject -Property $Properties

$MyObjec
...

$result = Invoke-Command -ComputerName Machine -UseSSL -InDisconnectedSession -ScriptBlock {
$MyObject.A
$MyObject.servers
$env:computername
}`
–InputObject $MyObjec -port 5986 -ConfigurationName myEndpoint -SessionOption @{OutputBufferingMode="Drop"} -Credential $credential | Receive-PSSession

$result

问题: 为什么$result没有显示关于$MyObject的任何内容?

它仅显示$MyObjec(在invoke-command中不显示)和$env:computername(在invoke-command中)

我该如何解决?

P.S这真的是我想要做的 我想同时进入位于6个不同AD中的多台计算机,但是它们应该使用不同的用户名, 并且我需要远程计算机中的$ A来处理另一件事。

$A = '123'
    $servers = 'computer1'
    $Properties = [ordered]@{A = $A
                              servers = $servers     
                            }

    $MyObject = New-Object -TypeName PSObject -Property $Properties

    $MyObjec
    ...

#Add
$servers@{'Machine1','Machine2','Machine3'}

Foreach ($servers in $servers) {

Star-Job {

$username = $servers+'account'

$password = $password

$credential = ....($username,$password)

    $result = Invoke-Command -ComputerName $servers -UseSSL -InDisconnectedSession -ScriptBlock {
    $MyObject.A
    $MyObject.servers
    $env:computername
    }`
    –InputObject $MyObjec -port 5986 -ConfigurationName myEndpoint -SessionOption @{OutputBufferingMode="Drop"} -Credential $credential | Receive-PSSession

    $result
}

}

我将尝试-Argument-List和param {} 因为我尝试使用-Argument-List和$ Using进行Start-Job,所以出现错误。 谢谢您的回复!

1 个答案:

答案 0 :(得分:2)

因为-Scriptblock { ... }中的部分在远程系统上执行,因此无法访问本地系统上的变量(范围不同)。

您可以通过使用-Argument-List参数将变量传递到远程系统来更改它,如下所示:

Invoke-Command -ComputerName Machine -ArgumentList $MyObject -ScriptBlock { 
    param($MyObject)

    $MyObject.A
}

或使用$using:来访问本地定义的变量,如下所示:

Invoke-Command -ComputerName Machine -ScriptBlock { 

    $using:MyObject.A
}