如何从远程pssession获取变量输出

Pow*_*ell 5 arrays powershell powershell-remoting

我有一个脚本从vmm获取虚拟硬盘信息,我从服务器远程执行它,目前我无法获取本地主机中的pssession之外的变量值,请你帮我实现同样的目标.

PS C:\Windows\system32> enter-pssession iscvmm02
[iscvmm02]: PS C:\Users\su\Documents>Add-PSSnapin Microsoft.SystemCenter.VirtualMachineManager
[iscvmm02]: PS C:\Users\su\Documents>$hide= Get-VMMServer -ComputerName "iscvmm02.corp.avanade.org"
[iscvmm02]: PS C:\Users\su\Documents>$VM = Get-VM | where { $_.ComputerNameString -contains "idpsm02.corp.air.org" }
[iscvmm02]: PS C:\Users\su\Documents>$harddisk=$VM.VirtualHardDisks
[iscvmm02]: PS C:\Users\su\Documents>$h=$harddisk.length
[iscvmm02]: PS C:\Users\su\Documents>for($i=0;$i-lt$h;$i++){
    New-Variable -Name "HardDiskType_$i" -value $harddisk[$i].vhdtype
    New-Variable -Name "HardDiskLocation_$i" -value $harddisk[$i].Location
}
[iadpscvmm02]: PS C:\Users\su\Documents>Exit-PSSession
PS C:\Windows\system32>$harddisktype_0
PS C:\Windows\system32>$harddisklocation_0
Run Code Online (Sandbox Code Playgroud)

因为你可以看到变量输出给出null值,我无法保留值

von*_*ryz 10

此示例从远程计算机的C驱动器获取列表,并将其分配给本地变量.因此,相应地调整VMM脚本.

$session = New-PSSession -ComputerName RemoteSystem
Invoke-Command -Session $session -ScriptBlock { $remoteC = gci c:\ }
# This shouldn't print anything.
$localC
# Print the result on remote computer an assing its output to localC variable
$localC = Invoke-Command -Session $session  -ScriptBlock { $remoteC }
# Print the local variable, it should contain remoteC data.
$localC
Run Code Online (Sandbox Code Playgroud)

  • 这里的关键是Enter-PSSession是一个交互式会话,没有与本地会话的连接.因此,您应该使用Invoke-Command而不是进入远程会话. (4认同)