如何使用 WMI 获取虚拟机最大内存?

如何使用 WMI 获取虚拟机最大内存?

在 Hyper-V 下运行的 Windows 2012 R2 虚拟机上,当虚拟机使用动态内存时,任务管理器能够显示虚拟机的最大内存,如下面的屏幕截图所示。

在此处输入图片描述

我尝试浏览以下课程,但找不到我需要的内容:

  • Win32_OperatingSystem(TotalVisibleMemorySize 仅显示虚拟机迄今为止消耗的内存量 - 而不是最大值)
  • Win32_物理内存
  • Win32_PhysicalMemoryArray
  • Win32_ComputerSystem(TotalPhysicalMemory 仅报告与上面的 TotalVisibleMemorySize 相同的内容 - 即第一个已提交的内存值)

是否可以使用 WMI 或注册表以编程方式查询从虚拟机内部获取此最大内存值?

答案1

现代操作系统(Windows 8/2012 及更新版本)包含一个名为Win32_PerfRawData_Counters_HyperVDynamicMemoryIntegrationService在命名空间下根目录\cimv2

此类有一个名为最大内存兆字节显示最大内存,在 Windows 2012 及以上版本的任务管理器中也可以看到。

VBScript 示例代码:

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfRawData_Counters_HyperVDynamicMemoryIntegrationService",,48)
For Each Item in colItems
    Wscript.Echo "Maximum memory in Megabytes  " & Item.MaximumMemoryMbytes
Next

Powershell 示例代码:

Get-WmiObject -namespace root\cimv2 -class Win32_PerfRawData_Counters_HyperVDynamicMemoryIntegrationService | Select-Object MaximumMemoryMBytes

此类在 Windows 2008 R2/Windows 7 或更早版本的操作系统中不存在。

关于此类的更多信息可以找到这里

答案2

我知道我迟到了,但是这个问题困扰了我很长时间,所以......

Get-Counter "\Hyper-v Dynamic Memory Integration Service\Maximum Memory, Mbytes"

据我所知,虚拟机不知道动态内存是否启用,它只知道已分配了多少内存以及内存上限。

相关内容