首先,我应该首先承认我对使用 WMI 或 LINQ 真的不太了解。所以我相信任何人都不会感到惊讶,因为我遇到了这样的困难!
问题是我试图从同一个 WMI 对象中查询或返回多个值。通常这不会太糟糕,但我发现很难解决这个问题,因为只需要返回与特定数据集匹配的元素。问题是,我必须首先查询 WMI 以获取特定元素或值,然后重新启动查询,按所述元素或值过滤以返回所需的数据集。
我确信我可以遍历 WMI 对象中的所有元素并将它们附加到集合中。然后遍历集合,直到我得到我正在寻找的东西,但我仍然有过滤掉所有额外不必要元素的问题。
所以我想我的问题是,对 WMI 对象进行高级搜索的最佳方法是什么?如何优化该过程,以便不需要很长时间来检索我正在寻找的信息?
在我的多次搜索中,我发现了一些关于使用 LINQ 的人的参考资料,但我对 LINQ 的有限接触意味着我不确定如何在这种情况下使用它,因此非常感谢任何帮助或见解。
到目前为止,这是我想出的:
ManagementObjectSearcher searcher = new ManagementObjectSearcher
("SELECT * FROM Win32_NetworkAdapterConfiguration where IPEnabled=true");
IEnumerable<ManagementObject> objects = searcher.Get().Cast<ManagementObject>();
string description = (from o in objects orderby o["IPConnectionMetric"]
select o["Description"].ToString()).FirstOrDefault();
_NICINDEX = (from o in objects orderby o["IPConnectionMetric"]
select o["Index"].ToString()).FirstOrDefault();
_MACADDRESS = (from o in objects orderby o["IPConnectionMetric"]
select o["MACAddress"].ToString()).FirstOrDefault();
_IPADDRESS = (from o in objects orderby o["IPConnectionMetric"]
select o["IPAddress"].ToString()).FirstOrDefault();
_IPV6ADDRESS = (from o in objects orderby o["IPConnectionMetric"]
select o["IPAddress"].ToString()).FirstOrDefault();
_SUBNETMASK = (from o in objects orderby o["IPConnectionMetric"]
select o["IPSubnet"].ToString()).FirstOrDefault();
_GATEWAY = (from o in objects orderby o["IPConnectionMetric"]
select o["DefaultIPGateway"].ToString()).FirstOrDefault();
_DNSSERVER = (from o in objects orderby o["IPConnectionMetric"]
select o["DNSServerSearchOrder"].ToString()).FirstOrDefault();
_DNSSECSVR = (from o in objects orderby o["IPConnectionMetric"]
select o["DNSServerSearchOrder"].ToString()).FirstOrDefault();
return description;