我遇到了麻烦。有人可以帮助我吗? 这是我的代码:
$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,所以出现错误。 谢谢您的回复!
答案 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
}