Многие администраторы Windows сталкиваются с неполадками в работе интерфейса управления Windows (WMI). Что касается проблем с WMI, о которых пользователи сообщали группе Microsoft Global Escalation Services, то выяснилось, что главная их причина связана с базовыми отношениями зависимости — например, в параметрах DCOM, реестре или файловой системе. В подобных ситуациях мы часто используем утилиту WMI Diagnosis (WMIDiag), которую вы также можете применять для диагностики базовых отношений зависимости, вызвавших проблемы с WMI, и даже для получения предлагаемых способов исправления ошибки. Утилиту WMIDiag можно загрузить по ссылке go.microsoft.com/fwlink/? LinkId=62562.

Архитектура WMI

Для иллюстрации применения WMIDiag рассмотрим вкратце архитектуру WMI. Классы WMI можно использовать в сценариях или приложениях для автоматизации административных задач на удаленных компьютерах, что особенно удобно при управлении большим числом систем. Архитектура WMI включает три основных компонента.

  • Провайдеры WMI и управляемые объекты. Провайдеры WMI, представленные COM-объектами, контролируют другие объекты — логические или физические жесткие диски, операционную систему, процессы и службы.
  • Инфраструктура WMI. Инфраструктура включает службу WMI (winmgmt.exe) и репозиторий WMI, организованный по пространствам имен, таким как rootdefault или rootcimv2. Служба WMI играет роль посредника между провайдерами WMI и репозиторием WMI. Большую часть данных WMI получает от провайдера динамически, по запросу клиента.
  • Подписчики WMI (клиенты). Подписчиком может быть сценарий или корпоративное приложение — например, Microsoft System Center Operations Manager. Подписчики могут запрашивать у WMI системную информацию, подписываться на события (например, при изменении действующей в системе политики) либо запускать удаленные задачи управления. Более подробную информацию о WMI можно получить по ссылке msdn.microsoft.com/en-us/library/
    aa394582(VS.85).aspx.

Что такое WMIDiag?

Утилита WMIDiag написана на языке VBScript и запускается из командной строки или двойным щелчком на файле WMIDiag.exe. При запуске без аргументов из командной строки WMIDiag проверяет десятки параметров, элементы реестра, состояние служб, доступность кода, подозрительные отключения и записи в журнале событий, относящихся к DCOM.

WMIDiag может диагностировать следующие проблемы:

  • сценарии не выполняются или «виснут»;
  • корпоративные приложения управления системами — например, Microsoft Systems Management Server (SMS), System Center Operations Manager или HP OpenView, не выполняют обычные задания;
  • инвентаризация программного и аппаратного обеспечения не обеспечивает сбора необходимой информации;
  • не устанавливаются должным образом приложения или пакеты обновлений;
  • не разворачиваются объекты групповой политики (GPO);
  • события ошибок DCOM, регистрируемые в журнале событий приложений, указывают на ошибки приложений.

Неполадки с WMI

Недавно я работал с одним пользователем, у которого возникли проблемы с построением отчетов инвентаризации программного обеспечения по нескольким клиентам Windows XP SP2. Такие отчеты — важный инструмент обеспечения соответствия требованиям лицензирования и обновления программ на предприятии. Приложения сбора данных инвентаризации, такие как SMS или System Center Configuration Manager 2007, подключаются к WMI для извлечения экземпляров класса Win32_Service с целью определения служб, работающих в системе. Поэтому мы начали с того, что запустили в системе пользователя встроенный инструмент WMI — утилиту WBEMTest (для этого надо выбрать «Пуск», «Выполнить» и ввести wbemtest), а затем подключились к корневому пространству имен cimv2 и выполнили следующий запрос:

Select * From Win32_Service

Этот запрос позволяет получить информацию о службах, выполняемых в системе. Вместо этого была выдана ошибка (см. экран 1).

Ошибка при опросе WMI

Как мы видим, описание ошибки, т.е. «сбой загрузки провайдера», зашифровано. Как упоминалось выше, провайдеры представлены COM-объектами. COM-объекты, не зарегистрированные как следует, не могут быть загружены, что и приводит к ошибке. Остается узнать, какой из провайдеров не зарегистрирован должным образом. Для ответа на этот вопрос мы воспользовались утилитой WMIDiag.

WMIDiag в деле

В ходе выполнения WMIDiag создаются три файла, по умолчанию помещаемые в каталог%TEMP%:

  • файл .log с подробной информацией о деятельности утилиты WMIDiag;
  • файл .txt, содержащий сводный отчет с предупреждениями и ошибками, достойными рассмотрения;
  • файл .csv, содержащий статистику, которую можно использовать для анализа тенденций проблем с WMI во времени.

В файле сводных данных .txt, содержащем отчет по проблеме с WMI, мы нашли ошибку, показанную на экране 2, определяющую провайдера, который является виновником ошибки.

WMIDiag указывает на конкретного провайдера как источник ошибки

На экране видно, что WMIDiag предлагает варианты решения проблемы. В данном случае таким решением стала регистрация провайдера при помощи команды, предлагаемой WMIDiag (c: egsvr32.exe tscfgwmi.dll). Заметим, что после выдачи запроса загружаются все провайдеры для данного класса и производных классов. В нашем случае базовым запрашиваемым классом был Win32_Service, а одним из производных классов — Win32_TerminalService. Это означает, что загружается и провайдер WMI служб терминалов. Регистрация провайдера, обнаруженного утилитой WMIDiag, решила проблему пользователя.

Другая ситуация, с которой мне недавно пришлось столкнуться, была связана с применением GPO. Контроллеры домена в среде клиента не выполняли обработку GPO. В результате каждые пять минут в журнале событий приложений регистрировались ошибки Userenv: «Не удалось подключиться к домену xxxx.com. (Тайм-аут). Обработка групповой политики прекращена».

Ошибки такого типа могут казаться безнадежными ввиду их общего характера и отсутствия полезных подсказок, помогающих понять, где следует искать причину. Я выяснил, что диагностику лучше всего начинать с параметров DCOM, поскольку DCOM влияет на возможность подключения и права доступа всей системы. WMIDiag помогает найти некорректные параметры DCOM и предлагает точные команды, которые следует выполнить для исправления ошибок конфигурации.

Результат запуска WMIDiag в системе клиента для диагностики ошибок GPO показан на экране 3. Как и в предыдущем примере, утилита не только указала причину проблемы, но и предложила возможные варианты ее решения.

WMIDiag указвает на ошибку DCOM

Вариант с использованием утилиты с графическим интерфейсом, т.е. выполнение dcomnfg.exe, удобен при небольшом числе обслуживаемых систем, а вариант с командной строкой больше подходит для составления сценария исправления ошибки для большого числа систем. Выполнение dcomnfg.exe решило проблему на двух контроллерах домена после внесения изменений, рекомендованных утилитой WMIDiag, и перезагрузки сервера.

Заметим, что WMIDiag можно использовать для анализа работоспособности WMI на сотнях серверов одновременно. Для этого следует запустить WMIDiag с параметром SMS, подавляющим окна сообщений, обычно открываемые при интерактивном выполнении. Чтобы назначить удаленный файл общего доступа для хранения всех файлов, создаваемых WMIDiag, следует запустить WMIDiag с параметром LogFilePath и указать путь к файлу.

Нужна ли вам помощь службы технической поддержки Microsoft в диагностике данных, выводимых утилитой WMIDiag? Мы, конечно, не гарантируем ответа на любой вопрос, но вы можете отправить данные, выводимые WMIDiag, по адресу midiag@microsoft.com (в письме коротко опишите проблему), и наша группа технической поддержки постарается помочь найти решение. Ваши предложения или вопросы по использованию WMIDiag можно отправлять мне либо посетите страницу www.microsoft.com/technet/scriptcenter/topics/help/wmidiag.mspx.

Майкл Моралес (morales@microsoft.com) — старший инженер службы поддержки Microsoft Global Escalation Services. Специализируется на  проблемах отладки и производительности Windows