2011-06-30 44 views
5

我有一個腳本可以從vmm獲取虛擬硬盤信息,即時從服務器遠程執行,目前我無法獲取本地主機pssession之外的變量值,可以你請幫助我實現這一目標。如何從遠程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 

,你可以看到這兩個變量輸出我們給空值,即時通訊留不住值

回答

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 
+4

這裏的關鍵在於Enter-PSSession是一個沒有連接到本地會話的交互式會話。所以你應該使用Invoke-Command而不是進入遠程會話。 – JasonMArcher

+0

謝謝@jasonmarcher – PowerShell