调用远程powershell命令不返回所有结果

时间:2016-03-16 01:51:00

标签: powershell invoke

我对powershell很新,我尝试调用远程PowerShell命令来返回驱动器的大小,但遇到了麻烦。

如果我直接在服务器上运行以下命令,那么我得到4的结果。

import-module virtualmachinemanager
$checks = get-vm -Name DC1 | get-scvmcheckpoint
foreach ($disk in $checks){
$disk.virtualdiskdrives.virtualharddisks.size
}

然后我尝试使用下面的命令远程运行命令,但是我没有得到结果。 $ checks变量包含许多其他值。

 $session = New-PSSession -ComputerName VM01 -ConfigurationName     Microsoft.Powershell32 -Credential administrator
    $checks = Invoke-Command -Session $session -ArgumentList VM01 -ScriptBlock {
    import-module virtualmachinemanager
    get-vm -Name DC1 | get-scvmcheckpoint
}

foreach ($disk in $checks){
$disk.virtualdiskdrives.virtualharddisks.size
}

1 个答案:

答案 0 :(得分:1)

这里最可能出现的问题(尚未测试实际VMM服务器上的代码)是从远程会话返回的对象是序列化和反序列化的。这是一个参考How objects are sent to and from remote sessions

为了解决这个问题,我建议在远程机器上进行所有处理,只返回简单的PS对象。

$session = New-PSSession -ComputerName VM01 -ConfigurationName     Microsoft.Powershell32 -Credential administrator
$checks = Invoke-Command -Session $session -ArgumentList VM01 -ScriptBlock {
    import-module virtualmachinemanager
    $disks = get-vm -Name DC1 | get-scvmcheckpoint
    foreach ($disk in $disks){
        $disk.virtualdiskdrives.virtualharddisks.size
    }
}

foreach ($disk in $checks){
    write-host "Disk size = $disk"
}