Powershell 调用命令 $input

Powershell invoke-command $input

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

$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{} Beacase 我尝试使用 -Argument-List 和 $Using 启动作业,但出现错误。 谢谢你的回复!

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

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

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

    $MyObject.A
}

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

Invoke-Command -ComputerName Machine -ScriptBlock { 

    $using:MyObject.A
}