リモートの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によって提案されたように、「ManagementObjectSearcherクラスを使用してサーバー機能から必要な機能を直接選択する」ことを試みました。
最初のfalseの戻りを高速化しましたが、完了するまでに約14秒かかります。これにより、クラスター内で照会されたすべてのサーバーの合計が140分になります。
編集2:
WBEMTEST(Windows Management Instrumentation Tester)を使用してWin32_ServerFeatureに対してテストを実行しようとしましたが、リモートコンピューターへの接続に問題があるようです-リモートコンピューターの1つに対してテストを実行すると、接続に約12秒、戻るに約2秒かかります。データ。
したがって、Sergrey Vによって提案されたソリューションは、これまでのところWMIクエリの最速のソリューションのようです。