2

WMI を使用して特定の条件に一致するコンピューターの Windows ドメインを精査するコードがあります。

クエリしようとしているコンピューターと通信できない場合、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
  }
}
4

1 に答える 1

0

この VBScript (vbs) のコードは、WMI を介してそれを行います。つまり、WMI 接続を初期化し、認証または接続の問題に対するエラー処理を実行します。両方を知っている人がc#に「転写」するのに約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
于 2012-10-31T23:17:33.807 に答える