使用WMI类读取Hyper-V中的VM的RAM和磁盘利用率

问题描述:

我是WMI类的新手,我想在C#代码中使用WMI类读取Hyper-V上不同虚拟机的CPU,RAM和磁盘利用率。使用WMI类读取Hyper-V中的VM的RAM和磁盘利用率

CPU使用率:能够通过使用性能ProcessorLoad和ProcessorLoadHistory

得到它
 ManagementBaseObject outParams = virtualSystemService.InvokeMethod("GetSummaryInformation", inParams, null); 

    ManagementBaseObject[] summaryInformationArray = (ManagementBaseObject[])outParams["SummaryInformation"]; 

内存使用率:没有能够得到当前内存使用率的动态和静态分配的精确值。 'Msvm_MemorySettingData'类的VirtualQuantity和Reservation属性给出了动态RAM情况下的启动RAM值和静态RAM情况下分配的RAM的最小值。

HardDisk利用率:无法获得每个虚拟机的硬盘利用率。

我的代码是:

public static ManagementObject GetTargetComputer(string vmElementName, ManagementScope scope) 
    { 
     string query = string.Format("select * from Msvm_ComputerSystem Where ElementName = '{0}'", vmElementName); 

     ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, new ObjectQuery(query)); 

     ManagementObjectCollection computers = searcher.Get(); 

     ManagementObject computer = null; 

     foreach (ManagementObject instance in computers) 
     { 
      computer = instance; 
      break; 
     } 
     return computer; 
    } 

void GetSummaryInformation(ManagementObject virtualSystemSettings, UInt32[] requestedInformation, ManagementObject virtualSystemService) 
    { 
     ManagementBaseObject inParams = virtualSystemService.GetMethodParameters("GetSummaryInformation"); 
     string[] settingPaths = new string[1]; 
     settingPaths[0] = virtualSystemSettings.Path.Path; 
     inParams["SettingData"] = settingPaths; 
     inParams["RequestedInformation"] = requestedInformation; 
     ManagementBaseObject outParams = virtualSystemService.InvokeMethod("GetSummaryInformation", inParams, null); 

     UInt32 v = (UInt32)outParams["ReturnValue"]; 

     if ((UInt32)outParams["ReturnValue"] == 0) 
     { 
      ManagementBaseObject[] summaryInformationArray = (ManagementBaseObject[])outParams["SummaryInformation"]; 

      foreach (ManagementBaseObject summaryInformation in summaryInformationArray) 
      { 

       foreach (UInt32 requested in requestedInformation) 
       { 
        string Name = summaryInformation["Name"].ToString(); 
        switch (requested)//103, 106, 109, 104, 3, 4, 101, 105 
        { 

         case 103: 
          string MemoryUsage = summaryInformation["MemoryUsage"].ToString(); 
          break; 
         case 112: 
          Int32 MemoryAvailable = (Int32)summaryInformation["MemoryAvailable"]; 
          break; 
         case 113: 
          Int32 AvailableMemoryBuffer = (Int32)summaryInformation["AvailableMemoryBuffer"]; 
          break; 
        } 
       } 
      } 
     } 
     else 
     { 
      Console.WriteLine("Failed to retrieve virtual system summary information"); 
     } 

     inParams.Dispose(); 
     outParams.Dispose(); 
    } 


ManagementObject virtualSystem = GetTargetComputer(vm["ElementName"].ToString(), Scope); 

      ManagementObjectCollection virtualSystemSettings = virtualSystem.GetRelated 
      (
       "Msvm_VirtualSystemSettingData", 
       "Msvm_SettingsDefineState", 
       null, 
       null, 
       "SettingData", 
       "ManagedElement", 
       false, 
       null 
      ); 
      ManagementObject virtualSystemSetting = null;    
      foreach (ManagementObject instance in virtualSystemSettings) 
      { 
       virtualSystemSetting = instance; 

       foreach (ManagementObject memorySettingData in virtualSystemSetting.GetRelated("Msvm_MemorySettingData")) 
       { 
        string HeartBeat = (string)memorySettingData["Heartbeat"]; 
        string MemoryUsage = (string)memorySettingData["MemoryUsage"]; 
        string VirtualQuantity = (string)memorySettingData["VirtualQuantity"]; 
        string Limit = (string)memorySettingData["Limit"]; 
       } 


      } 
      UInt32[] requestedInfo = { 103, 112, 113 }; 
      GetSummaryInformation(virtualSystemSetting, requestedInfo, virtualSystemService); 

是否有可能得到各个虚拟机的Hyper-V中使用WMI类当前的内存使用率和硬盘的利用率?

+0

请不要包含关于问题标题中使用的语言的信息,除非在没有它的情况下没有意义。标签用于此目的。 –

要找出内存使用率,您可能想看看下面的“Hyper-V的动态内存”例如:

https://code.msdn.microsoft.com/windowsdesktop/Hyper-V-dynamic-memory-9b0b1d05

它也可以为您提供有关如何获取其他信息洞察力你正在寻找。