如何通过Hyper-V的Measure-VM命令正确获取虚拟机的入站/出站网络流量值
如何通过Hyper-V的Measure-VM命令正确获取虚拟机的入站/出站网络流量值
我明白你遇到的问题了——用Measure-VM Android能在输出表格里看到NetworkInbound和NetworkOutbound的数值,但直接通过.NetworkInbound或.NetworkOutbound属性访问却拿不到值,这确实有点反直觉。
其实原因很简单:Measure-VM返回的对象里,网络流量数据并不是直接作为顶级属性存在的,而是嵌套在NetworkMeteringReport这个属性里(它是一个数组,对应虚拟机的每一块网卡)。
下面是具体的解决步骤:
1. 先获取完整的虚拟机测量对象
$vmStats = Measure-VM Android
2. 提取单网卡的流量数据
如果你的虚拟机只有一块网卡,直接访问数组的第一个元素即可,记得把单位从KB转换成MB(和Measure-VM表格输出的单位保持一致):
# 获取入站流量(MB) $inboundMB = $vmStats.NetworkMeteringReport[0].InboundKilobytes / 1024 # 获取出站流量(MB) $outboundMB = $vmStats.NetworkMeteringReport[0].OutboundKilobytes / 1024 # 输出结果 Write-Host "入站流量: $inboundMB MB" Write-Host "出站流量: $outboundMB MB"
3. 处理多网卡的情况
如果虚拟机有多块网卡,可以遍历NetworkMeteringReport数组,分别获取每块网卡的流量:
foreach ($nicReport in $vmStats.NetworkMeteringReport) { $nicName = $nicReport.NetworkAdapterName $inbound = [math]::Round($nicReport.InboundKilobytes / 1024, 2) # 保留两位小数 $outbound = [math]::Round($nicReport.OutboundKilobytes / 1024, 2) Write-Host "网卡 [$nicName] 入站流量: $inbound MB" Write-Host "网卡 [$nicName] 出站流量: $outbound MB`n" }
额外注意:确保开启了资源计量功能
如果运行以上命令后NetworkMeteringReport是空的,说明你的虚拟机还没开启网络资源计量,先执行下面的命令开启:
Enable-VMResourceMetering -VMName Android
开启后再运行Measure-VM就能正常获取流量数据了。
备注:内容来源于stack exchange,提问作者user167420
相关产品推荐
相关产品推荐

