我一直在为我的工作开发一个小型WMI Info抓取工具,因为我使用了数百台服务器,并且当必须在超过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代码创建器(http://www.microsoft.com/en-us/download/confirmation.aspx?id=8572)中给出了问题,并且它能够获得我需要的数据,但是当我在程序中运行时它会给出COMException。我已经查看了Code Creator制作的代码,以及我的代码,并修改了一些代码,但它仍然给我错误。