Запрос WMI, возвращающий неполные результаты

6 sylv1 [2014-10-20 16:51:00]

Я работаю над perl script, который используется для проверки работы нескольких служб. Для этого мы используем WMI для запроса удаленных серверов Windows:

my $WMI_locator = Win32::OLE->new('WbemScripting.SWbemLocator');
$WMI_locator->{Security_}->{AuthentificationLevel} = 6;
my $computer = $WMI_locator->ConnectServer($server, 'root\cimv2', $adminuser, $adminpasswd);
my $services = $computer->ExecQuery('SELECT * FROM Win32_Service', 'WQL', $flag_return_immediately | $flag_forward_only);

Этот фрагмент кода отлично работает при выполнении на моем ноутбуке dev. Однако, когда я пытаюсь запустить его с рабочего сервера, возникают странные вещи: для некоторых компьютеров с удаленными окнами я могу получить примерно половину списка служб.

Я рассмотрел это и обнаружил, что проблема происходит только на серверах с большим количеством сервисов (около 150) и для которых существует разница в среднем пинге (~ 60 мс на локальном сервере, ~ 215 мс на производственном сервере). Проблема, похоже, исходит от WMI, а не perl; Я попытался запросить серверы из командной строки DOS, и я получаю сообщение об ошибке при попытке получить службы, хотя запрос на процессор работает очень хорошо:

E:\>wmic /NODE:server /USER:adminuser /PASSWORD:adminpasswd SERVICE GET Caption, State
Node - server
ERROR:
Code = 0x800706be
Description = The remote procedure call failed.
Facility = Win32

E:\>wmic /NODE:server /USER:adminuser /PASSWORD:adminpasswd CPU GET Name, Status
Name                                             Status
Intel(R) Xeon(R) CPU           X5650  @ 2.67GHz  OK
Intel(R) Xeon(R) CPU           X5650  @ 2.67GHz  OK
Intel(R) Xeon(R) CPU           X5650  @ 2.67GHz  OK
Intel(R) Xeon(R) CPU           X5650  @ 2.67GHz  OK

Учитывая это, я предполагаю, что проблема связана с сетью, но мы сейчас вникаем в страну, с которой я не знаком. Есть ли какой-то параметр, который я пропустил и/или что-то не так с тем, как я это делаю?

Спасибо за ваши ответы!

perl wmi


1 ответ


1 harvey [2014-10-21 05:42:00]

Эта ошибка почти всегда (хотя и не исключительно) вызвана несколькими экземплярами разных версий SQL-сервера. Чтобы сузить проблему, попробуйте "Утилита диагностики WMI" , она предназначена для решения этой проблемы.