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

调用远程powershell命令时未返回所有结果,powershell,invoke,Powershell,Invoke,我是powershell的新手,我尝试调用远程powershell命令来返回驱动器的大小,但遇到了问题 如果我直接在服务器上运行下面的命令,那么结果是4 import-module virtualmachinemanager $checks = get-vm -Name DC1 | get-scvmcheckpoint foreach ($disk in $checks){ $disk.virtualdiskdrives.virtualharddisks.size } 然后我尝试使用下面的命令

我是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
}

这里最可能的问题(尚未在实际的VMM服务器上测试代码)是从远程会话返回的对象被序列化和反序列化。这里有一个参考资料

为了解决这个问题,我建议在远程机器上进行所有处理,只返回简单的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"
}

这将是您的问题之一,
-Credential administrator
-Credential参数应该是有效的PScredential对象Hi Jan,我不明白。当我执行命令时,它会提示我输入凭据。它自动将用户名填充为“管理员”,我只需输入密码。当脚本执行时,我不认为这是一个问题。如果我显示$checks的结果,我可以看到其中有值。但出于某种原因,不是“virtualdiskdrives.virtualharddisks.size”。别担心,忘了您可以只提供用户名并得到提示。虽然“\Administrator”可能是更好的选择。在$checks变量中你得到了什么?我一直在使用PowerGUI,所以我可以筛选变量结果,在$checks变量中有很多。如果展开它,我可以在SyncRoot\1\VirtualDiskDrives下看到,但在该下没有“virtualharddisks”。但是,还有另一个SyncRoot的值为“System.Object”。但对我来说没什么意义。我会试着贴一张截图。啊,对了,太棒了!这就做到了,也给了我一个很好的教训。谢谢你,简!