2011-07-13 15 views
2

WMIを使用して特定の条件に一致するコンピュータのWindowsドメインを検索するコードがあります。WMIを使用してクエリを実行するときのComExceptionsの防止

私はCOMExceptionを取得します。私が照会しようとしているコンピュータと通信できない場合。大規模なドメインでテストすると、何千もの例外がスローされることになり、パフォーマンスが非常に高くなります。

有効な接続を確認してから、これらのエラーが発生しないようにする方法はありますか?

簡体例:

foreach(var computer in domain) { 
    var scope = new ManagementScope(computerPath, options), query); 
    try { 
    using (var searcher = new ManagementObjectSearcher(scope)) { 

     if (searcher.Get().Count == 0) { 
     // do stuff 
     } 

    } 
    } catch(ComException e) { 
    // Log and continue 
    } 
} 
+1

これは本当の理由ではありません。ネットワークのタイムアウトは、例外を処理するよりも*ロット*長くなります。タイムアウトを回避することはできません。 –

+0

私は時間を心配していません。私は、比較的短い時間で何千もの例外をスローするというCPUサイクルとメモリオーバーヘッドが心配です。私の「本当の」コードは非同期で実行され、テストの1つで1分間に約150の例外がスローされます。 –

答えて

0

のVBScript(VBS)内のコードのこのビットWMI経由だけでそれを行います:WMI接続を初期化し、認証または接続の問題のエラー処理を実行します。私は両方を知っている人には約30秒かかると思っています。 :)

' Verify Computer exists and account used has sufficient rights 
Set objSWbemServices = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
If(IsEmpty(objSWbemServices) = True) Then 
    WScript.Echo("OBJECT_NOT_INITIALIZED :: " & strComputer) 
    WScript.Quit(OBJECT_NOT_INITIALIZED) 
End If 
関連する問題