【问题标题】:WMI - query multiple informationsWMI - 查询多个信息
【发布时间】:2012-03-02 19:59:32
【问题描述】:

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

这段代码可以运行,但是这段代码是获取信息的好方法吗?

是否可以在每次请求时调用“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"]);
}

【问题讨论】:

    标签: wmi wmi-query


    【解决方案1】:

    我做过类似的事情。我的应用程序运行时间更长,所以我为每台机器保留一个ManagementScope,每台机器的每个查询保留一个ManagementObjectSearcher。只有在查询过程中出现任何错误时,我才会处理这些对象。

    【讨论】:

      【解决方案2】:

      您应该重复使用ManagementObjectSearcher,因为它每次都连接到服务器,这将是一个开销。

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

      SELECT LoadPercentage FROM Win32_ComputerSystem
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-04
        • 2011-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多