我正在尝试从远程 win2008 服务器返回所有启用的功能。这根本不是问题——只要我知道到底要查询什么。
然而,我遇到的问题是,当我的查询没有找到结果时,验证该功能是否已安装需要很长时间 - 有时长达 2 分钟。(查询超过 600 个节点时不够好)。
以下代码是我发现的最快的方法,但是正如我所说:返回false需要永远:
public bool serverFeatureEnabled(string machineName, Win32_ServerFeature_ID id)
{
ManagementClass serviceClass = new ManagementClass("Win32_ServerFeature");
string strScope = string.Format(@"\\{0}\root\cimv2", machineName);
ConnectionOptions conOpt = new ConnectionOptions();
serviceClass.Scope = new ManagementScope(strScope, conOpt);
foreach (ManagementObject obj in serviceClass.GetInstances())
{
if ((UInt32)obj["ID"] == (uint)id)
{
return true;
}
}
return false;
}
有没有人对此有更好的想法,我不介意它是否根本不使用 WMI 查询。
我想做的就是加快速度。
我希望我有点道理!
任何帮助表示赞赏。
编辑:
我曾尝试按照 Sergrey V.
它确实加快了第一个 false 的返回,但是大约需要 14 秒才能完成,所有在集群中查询的所有服务器总共需要 140 分钟。
编辑2:
我尝试使用 WBEMTEST(Windows Management Instrumentation Tester)对 Win32_ServerFeature 运行测试,与远程计算机的连接似乎是问题 - 对其中一台远程计算机运行测试大约需要 12 秒才能连接,大约需要 2 秒才能返回数据。
所以 Sergrey V 提出的解决方案似乎是迄今为止 WMI 查询最快的解决方案。