WMI - 查询多个信息

时间:2012-03-02 11:51:42

标签: wmi wmi-query

我希望从我的环境中的几台服务器获取多个信息。

此代码正常运行,但此代码是获取信息的好方法吗?

可以在每次请求时调用“new ManagementObjectSearcher”吗?

ManagementObjectSearcher cpuUsage = new ManagementObjectSearcher
      ("\\\\" + strComputer + "\\root\\CIMV2", 
      "SELECT * FROM Win32_Processor");

foreach (ManagementObject queryObj in cpuUsage.Get())
{
    Console.WriteLine("LoadPercentage: {0}", queryObj["LoadPercentage"]);
}

ManagementObjectSearcher totalRAM = new ManagementObjectSearcher
       ("\\\\" + strComputer + "\\root\\CIMV2", 
       "SELECT * FROM Win32_ComputerSystem");

foreach (ManagementObject queryObj in totalRAM.Get())
{
  Console.WriteLine("TotalPhysicalMemory: {0}", queryObj["TotalPhysicalMemory"]);
}

ManagementObjectSearcher freeRAM = new ManagementObjectSearcher
  ("\\\\" + strComputer + "\\root\\CIMV2", 
      "SELECT * FROM Win32_PerfFormattedData_PerfOS_Memory");

foreach (ManagementObject queryObj in freeRAM.Get())
{
    Console.WriteLine("AvailableMBytes: {0}", queryObj["AvailableMBytes"]);
}

2 个答案:

答案 0 :(得分:1)

每次连接到服务器时都应该重用ManagementObjectSearcher,这将是一个开销。

为了提高效率,您可以指定所需的属性,而不是在您的wql中使用SELECT * FROM,即

SELECT LoadPercentage FROM Win32_ComputerSystem

答案 1 :(得分:1)

我做了类似的事情。我的应用程序运行时间较长,因此每台计算机保留一个ManagementScope,每台计算机每个查询保留一个ManagementObjectSearcher。如果在查询期间出现任何错误,我只处理这些对象。

相关问题