2

我一直在为我的工作开发一个小型 WMI 信息采集器,因为我与数百台服务器一起工作,并且当必须在超过 5 台服务器上获取某些信息时,能够获取某些信息会非常有益。

List<string> output = new List<string>();
ObjectQuery query = new ObjectQuery("SELECT * FROM ComputerSystem");

ManagementObjectSearcher objectSearcher = new ManagementObjectSearcher(ServerConnect.HardwareScope, query);
ManagementObjectCollection retObject = objectSearcher.Get();

foreach (ManagementObject manObj in retObject)
{
    string[] data = ((string)manObj["Description"]).Split('-');
    string IPMI = data[1].Substring(7);
    string firmware = data[2].Substring(5);

    output.Add("IPMI Version: " + IPMI);
    output.Add("BMC Firmware Version: " + firmware);
}

return output;

这是我目前用来从计算机系统中获取一些基本数据的方法,它可以在某些服务器上运行,但在其他服务器上崩溃可以获得我想要的正确信息;但是,我需要防止它因 COMException 而崩溃。

它说它在以下代码行中出现 System.Runtime.InteropServices.COMException:

foreach (ManagementObject manObj in retObject)

我一直在尝试解决这个问题,为什么某些服务器会返回此异常,而不是能够获取信息以及是否可以修复它。

在过去的几周里,我一直在尝试解决这个问题,最终决定就我遇到的这个特定问题寻求帮助。

更新

我已经为在 WMI Code Creator ( http://www.microsoft.com/en-us/download/confirmation.aspx?id=8572 )中给我问题的服务器运行了相同的名称空间和选择,并且它能够获得但是,我需要的数据在通过我的程序运行时会给出 COMException。我已经检查了 Code Creator 制作的代码,以及我的代码并修改了其中的一些,但它仍然给我错误。

4

0 回答 0