Предотвращение исключений ComException при запросах через WMI - PullRequest
2 голосов
/ 14 июля 2011

У меня есть код, который использует 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
  }
}

1 Ответ

0 голосов
/ 01 ноября 2012

Этот бит кода в VBScript (vbs) будет делать это только через WMI: инициализировать соединение WMI и выполнять обработку ошибок для аутентификации или проблем с соединением.Я предполагаю, что это займет около 30 секунд для кого-то, кто знает оба, чтобы "транскрибировать" в c #.:)

' 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
...