Многие администраторы 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).
Как мы видим, описание ошибки, т.е. «сбой загрузки провайдера», зашифровано. Как упоминалось выше, провайдеры представлены COM-объектами. COM-объекты, не зарегистрированные как следует, не могут быть загружены, что и приводит к ошибке. Остается узнать, какой из провайдеров не зарегистрирован должным образом. Для ответа на этот вопрос мы воспользовались утилитой WMIDiag.
WMIDiag в деле
В ходе выполнения WMIDiag создаются три файла, по умолчанию помещаемые в каталог%TEMP%:
-
файл .log с подробной информацией о деятельности утилиты WMIDiag;
-
файл .txt, содержащий сводный отчет с предупреждениями и ошибками, достойными рассмотрения;
-
файл .csv, содержащий статистику, которую можно использовать для анализа тенденций проблем с WMI во времени.
В файле сводных данных .txt, содержащем отчет по проблеме с WMI, мы нашли ошибку, показанную на экране 2, определяющую провайдера, который является виновником ошибки.
На экране видно, что 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. Как и в предыдущем примере, утилита не только указала причину проблемы, но и предложила возможные варианты ее решения.
Вариант с использованием утилиты с графическим интерфейсом, т.е. выполнение 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