首页 > 解决方案 > Powershell 调用命令 $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(不在调用命令中)和$env:computername(在调用命令中)

我该如何解决?

PS这真的是我想做的,我想同时进入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 进行 Start-Job,但出现错误。谢谢你的回复!

标签: powershellinvoke-command

解决方案


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

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

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

    $MyObject.A
}

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

Invoke-Command -ComputerName Machine -ScriptBlock { 

    $using:MyObject.A
}

推荐阅读