Hyper-V中Get-VM命令字段疑问及关机虚拟机内存、磁盘信息查询
Hyper-V虚拟机内存与硬盘信息查询指南
嘿,你的理解完全没错——MemoryAssigned确实是运行中虚拟机当前实际占用的内存,关机状态的虚拟机因为没有运行,这个字段会返回0或者$null。要获取关机VM的配置内存、以及硬盘相关信息,咱们一步步来解决:
1. 获取关机虚拟机的配置内存
关机虚拟机的预设启动内存存储在MemoryStartup属性里,把它加到你的脚本里,就能同时看到运行/关机VM的内存配置了。修改后的脚本如下:
Get-Vm | Sort-Object Name | Select-Object Name, Uptime, @{N="MemoryMB";E={$_.MemoryAssigned/1MB}}, @{N="MemoryStartupMB";E={$_.MemoryStartup/1MB}}, # 关机VM的配置启动内存 ProcessorCount, Status, @{N="MemoryMaxMB";E={$_.MemoryMaximum/1MB}}
MemoryStartupMB:这个属性不管VM是否运行,都会返回它配置的启动初始内存大小,完美解决关机VM的内存查询需求。
2. 获取虚拟机的硬盘相关信息
Get-Vm本身不直接包含硬盘细节,需要结合Get-VMHardDiskDrive(获取挂载的硬盘路径)和Get-VHD(获取硬盘容量等参数)来实现。这里给你两种实用写法:
写法1:单硬盘VM的简洁查询
如果你的虚拟机都只挂载了一个硬盘,可以直接在计算属性里关联查询:
Get-Vm | Sort-Object Name | Select-Object Name, Uptime, @{N="MemoryMB";E={$_.MemoryAssigned/1MB}}, @{N="MemoryStartupMB";E={$_.MemoryStartup/1MB}}, ProcessorCount, Status, @{N="MemoryMaxMB";E={$_.MemoryMaximum/1MB}}, @{N="VHDPath";E={($_ | Get-VMHardDiskDrive).Path}}, # 硬盘文件路径 @{N="VHDSizeGB";E={ if ($hd = $_ | Get-VMHardDiskDrive) { (Get-VHD -Path $hd.Path).Size / 1GB } else { "无挂载硬盘" } }} # 硬盘容量(转换为GB)
写法2:支持多硬盘VM的查询
如果部分虚拟机挂载了多个硬盘,上面的方法只会返回第一个硬盘的信息,这时候可以用-join把所有硬盘的信息拼接起来:
Get-Vm | Sort-Object Name | Select-Object Name, Uptime, @{N="MemoryMB";E={$_.MemoryAssigned/1MB}}, @{N="MemoryStartupMB";E={$_.MemoryStartup/1MB}}, ProcessorCount, Status, @{N="MemoryMaxMB";E={$_.MemoryMaximum/1MB}}, @{N="VHDPaths";E={($_ | Get-VMHardDiskDrive).Path -join "; "}}, # 所有硬盘路径用分号分隔 @{N="VHDSizesGB";E={ ($_ | Get-VMHardDiskDrive | ForEach-Object { [math]::Round((Get-VHD -Path $_.Path).Size / 1GB, 2) }) -join "; " }} # 对应硬盘的容量(保留两位小数)
注:如果虚拟机没有挂载硬盘,这些字段会返回你设置的默认提示(比如上面的“无挂载硬盘”),可以根据实际需求调整。
内容的提问来源于stack exchange,提问作者Sudhir Somu
相关产品推荐
相关产品推荐

