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
}
我遇到了麻烦..有人可以帮我吗? 这是我的代码:
$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
}