Любой бывалый Windows-админ периодически сталкивается с проблемами в работе службы WMI (Windows Management Instrumentation) и ее компонентах. Наличие проблем в подсистеме WMI является критичным с точки зрения нормального функционирования Windows, поэтому администратору необходимо проверить и восстановить работоспособность WMI. В этой статье мы опишем простую методику диагностирования и устранения неполадок службы WMI в Windows.
О наличии проблем с WMI может свидетельствовать широкий спектр ошибок:
- Ошибки обработки WMI запросов в системных журналах и логах приложений (
0x80041002 - WBEM_E_NOT_FOUND
,
WMI: Not Found
,
0x80041010 WBEM_E_INVALID_CLASS
); - Ошибки обработки GPO, связанные на WMI ( некорректная работа wmi фильтров групповых политик, и пр.);
- WMI запросы выполняются очень медленно;
- Ошибки при установке или работе агентов SCCM/SCOM;
- Ошибки в работе скриптов (vbs или PowerShell), использующих пространство имен WMI (скрипты с Get-WmiObject и т.д.).
Содержание:
- Диагностика проблем с WMI
- Исправление WMI репозитория, перерегистрация библиотек, перекомпиляция MOF файлов
- Сброс и пересоздание WMI репозитория (хранилища)
Диагностика проблем с WMI
В первую очередь нужно проверить служба Windows Management Instrumentation (Winmgmt) установлена в Windows и запущена. Вы можете проверить состояние службы в консоли services.msc или с помощью PowerShell:
Get-Service Winmgmt | Select DisplayName,Status,ServiceName
Если служба Winmgmt запущена, вы можете проверить работоспособность WMI, обратившись к ней с помощью простого WMI-запроса. Вы можете выполнить wmi запрос из командной строки или из PowerShell. Например, следующая команда выведет список установленных в Windows программ:
wmic product get name,version
Простейшая PowerShell команда для получения информации о версии и билда Windows 10 через WMI может выглядеть так:
get-wmiobject Win32_OperatingSystem
Как вы видите, служба WMI ответила на запрос корректно. Если при выполнении такого WMI-запроса Windows возвращает ошибку, скорее всего сервиса WMI работает некорректно, поврежден WMI репозиторий или есть какие-то другие проблемы.
В моем случае, например, при открытии свойств WMI Control в консоли управления компьютером (compmgmt.msc) появлялась надпись:
Failed to initialize all required WMI classes Win32_Processor. WMI: Invalid namespace Win32_WMISetting. WMI: Invalid namespace Win32_OperationSystem. WMI: Invalid namespace
Ранее для диагностики WMI существовала официальная утилита от Microsoft – WMIDiag.vbs (Microsoft WMI Diagnosis). WMIdiag это vbs скрипт, который проверяет различные подсистемы WMI и записывает собранную информацию в лог файлы (по умолчанию логи находятся в каталоге %TEMP% — C:USERS%USERNAME%APPDATALOCALTEMP). Получившийся отчет состоит из файлов, имена которых начинаются с WMIDIAG-V2.2 и включает в себя следующие типы фалов:
- .log файлы содержат подробный отчет об активности и работе утилиты WMIDiag;
- .txt файлы содержат итоговые отчеты о найденных ошибках, на которые стоит обратить внимание;
- В .csv файлах содержится информация, нужная для долгосрочного анализа работы подсистемы WMI.
Совет. В 64 битных версиях Windows wmidiag нужно запускать так:
c:windowsSystem32cscript.exe wmidiag.vbs
в противном случае появится ошибка:
WMIDiag must be run from native 64-bit environment. It is not supported in Wow64.
После окончания работы утилиты WMIDiag администратор должен изучить полученные файлы логов, проанализировать и попытаться исправить найденные ошибки.
К сожалению, последняя версия WMIDiag 2.2 корректно работает только с версиями до Windows 8.1/Windows Server 2012 R2. На данный момент Microsoft даже удалила ссылку на загрузку WMIDiag из Download Center. Но при желании, этот скрипт можно найти в сети.
WMIDiag может дать подробную информацию по исправлению частных ошибок в WMI, но в большинстве случаев процесс это довольно трудоемкий и стоит потраченного времени только при решении инцидентов в критичных системах (как правило, на продуктивных серверах). Для массового сегмента рабочих станций пользователей сбросить и пересоздатьWMI репозиторий в Windows.
Исправление WMI репозитория, перерегистрация библиотек, перекомпиляция MOF файлов
В Windows 10/Windows Server 2016 вы можете проверить целостность репозитория WMI с помощью команды:
winmgmt /verifyrepository
Если команда возвращает, что база данных WMI находится в неконсистентном состоянии (INCONSISTENT или WMI repository verification failed), стоит попробовать выполнить “мягкое” исправление ошибок репозитория:
Winmgmt /salvagerepository
WMI repository has been salvaged.
Данная команда выполняет проверку согласованности хранилища WMI и при обнаружении несогласованности перестраивает базу данных WMI.
Перезапустите службу WMI:
net stop Winmgmt
net start Winmgmt
Если стандартный способ исправления ошибок в WMI не помог, попробуйте следующий скрипт. Данный скрипт представляет собой ”мягкий” вариант восстановления службы WMI на компьютере (выполняется перерегистрация dll библиотек и службы WMI, перекомпилируются mof файлы). Данная процедура является безопасной и ее выполнение не должно привести к каким-либо новым проблемам с системой.
sc config winmgmt start= disabled
net stop winmgmt
cd %windir%system32wbem
for /f %s in ('dir /b *.dll') do regsvr32 /s %s
wmiprvse /regserver
sc config winmgmt start= auto
net start winmgmt
for /f %s in ('dir /b *.mof') do mofcomp %s
for /f %s in ('dir /b *.mfl') do mofcomp %s
На 64 битной версии Windows эти действия нужно также выполнить для каталога SysWOW64. Замените третью строку на
cd %windir%SysWOW64wbem
Указанные команды можно выполнить путем простой вставки в окно командой строки, либо сохранить код в bat файле wmi_soft_repair.bat и запустить его с правами администратора. После окончания работы скрипта, перезагрузите Windows и проверьте работу WMI.
Сброс и пересоздание WMI репозитория (хранилища)
Если вам не помогли мягкие способ восстановления WMI, рассмотренные выше, придется перейти к более “жесткому” способу восстановления работоспособности службы WMI, заключающегося в пересоздании хранилищаWMI.
WMI репозиторий (хранилище) находится в каталоге
%windir%System32WbemRepository
и представляет собой базу данных, в которой содержится информация о метаданных и определениях WMI классов. В некоторых случаях WMI репозиторий может содержать статическую информацию классов. При повреждении репозитория WMI, в работе службы Windows Management Instrumentation (Winmgmt) могут наблюдаться ошибки вплоть до полной невозможности ее запустить.
Если вы подозреваете, что репозиторий WMI поврежден, имейте в виду, что его пересоздание — это последняя шаг, к которому нужно прибегнуть только тогда, когда другие операции не помогают реанимировать WMI.
Следующая команда выполнит сброс базы данных WMI к исходному состоянию (как после чистой установки Windows). Используйте эту команду для выполнения hard reset репозитория WMI, если параметре salvagerepository не исправил проблему:
Winmgmt /resetrepository
Совет. На практике бывают случаи, когда пересоздание хранилища WMI приводит к проблемам со сторонним софтом. Это связано с тем, что все записи в базе WMI обнуляются (до состояния чистой системы). Такие программы скорее всего, придется переустанавливать в режиме восстановления.
Если обе команды (
Winmgmt /salvagerepository
и
Winmgmt /resetrepository
) не восстановили консистентное состояние базы WMI, попробуйте выполнить “жесткое” пересоздание базы WMI вручную таким скриптом:
sc config winmgmt start= disabled
net stop winmgmt
cd %windir%system32wbem
winmgmt /resetrepository
winmgmt /resyncperf
if exist Repos_bakup rd Repos_bakup /s /q
rename Repository Repos_bakup
regsvr32 /s %systemroot%system32scecli.dll
regsvr32 /s %systemroot%system32userenv.dll
for /f %s in ('dir /b *.dll') do regsvr32 /s %s
for /f %s in ('dir /b *.mof') do mofcomp %s
for /f %s in ('dir /b *.mfl') do mofcomp %s
sc config winmgmt start= auto
net start winmgmt
wmiprvse /regserver
На 64 битной версии Windows нужно также перерегистрировать dll/exe и перекомпилировать mof файлы в каталоге %windir%sysWOW64wbem.
Данный скрипт полностью пересоздает хранилище WMI (старый репозиторий сохраняется в каталог Repos_bakup). После окончания работы скрипта нужно перезагрузить Windows. Затем протестируйте работу службы WMI простым запросом.
Проверьте состояние WMI репозитория. Если ошибки исправлены, команда
winmgmt /verifyrepository
должна вернуть:
WMI repository is consistent
В этой статье мы собрали основные способы, позволяющие продиагностировать и устранить неполадки службы и репозитория WMI.
- Remove From My Forums
-
Вопрос
Ответы
-
net stop winmgmt
net start winmgmt
Все ответы
-
Она стоит и запущена по-умолчанию. Называется Windows Management Instrumentation.
-
net stop winmgmt
net start winmgmt -
To Ivanov Alex-MCSE: Спасибо.
To Komatozo: Вы были правы. Действительно WMI запускается по умолчанию, вот только DPM 2007 этого почему-то не видит и ругается на эту службу.
-
Предложено в качестве ответа
29 декабря 2017 г. 6:26
-
Предложено в качестве ответа
Часто Репозиторий WMI поврежден, что приводит к сбою загрузки поставщика. В этом руководстве мы расскажем, как восстановить или перестроить репозиторий WMI в Windows 10. Для тех, кто не в курсе, инструментарий управления Windows или WMI представляет собой набор спецификаций Microsoft для консолидации управления устройства и приложения в сети. Это база данных, в которой хранится метаинформация и определения для классов WMI . Только используя их, условия систем могут быть известны.
Репозиторий доступен здесь –
% WINDIR% system32 Wbem Repository
Вкратце, он предоставляет конечным пользователям статус локальной или удаленной компьютерной системы.
Примечание . Не используйте это на компьютере с кластером Server 2012
Содержание
- Восстановить или перестроить репозиторий WMI в Windows
- 1] Сбросить WMI Repository
- 2] Принудительное восстановление WMI
- WMI Самовосстановление не работает
- 3] WMI Fixer Tool
Восстановить или перестроить репозиторий WMI в Windows
Существуют инструменты командной строки для исправления или восстановления хранилища WMI. Тем не менее, Microsoft предполагает, что лучше всего проверить, есть ли коррупция.
Ниже приведен список ошибок и проблем с разрешениями, которые вы можете увидеть:
- Невозможно подключиться к корневым пространствам имен по умолчанию или rootcimv2. Сбой с кодом ошибки «0x80041002», указывающим на «WBEM_E_NOT_FOUND».
- Когда вы открываете «Управление компьютером» и щелкаете правой кнопкой мыши пункт «Управление компьютером» (локальное) и выбираете «Свойства», появляется следующее сообщение об ошибке: «WMI: не найден» или зависание при попытке подключения
- 0x80041010 WBEM_E_INVALID_CLASS
- Попытка использовать wbemtest , и он зависает
- Схемы/Объекты отсутствуют
- Странные ошибки подключения/работы (0x8007054e).
Лучший способ проверить это – запустить эту команду в командной строке с повышенными правами.
winmgmt/verifyrepository
Если в хранилище есть проблема, он ответит « хранилище не согласовано », если нет, то это что-то другое, что вызвало проблему. Теперь, когда вы уверены, что коррупция существует, давайте следуем этим советам, чтобы восстановить или перестроить репозиторий WMI.
1] Сбросить WMI Repository
Откройте командную строку с повышенными привилегиями.
Запустите команду:
winmmgmt/salvagerepository
Затем выполните команду, чтобы увидеть, вернется ли она как
winmgmt/verifyrepository
Если говорится, что Репозиторий не согласован , вам нужно выполнить:
winmgmt/resetrepository
Это поможет вам исправить хранилище WMI. Вот что означает каждая из команд WMI:
- salvagerepository: этот параметр при использовании с командой winmmgmt выполняет проверку согласованности. Если обнаружено несоответствие, он восстанавливает хранилище.
- verifyrepository: выполняет проверку непротиворечивости в WMI-хранилище.
- resetrepository: репозиторий сбрасывается в исходное состояние при первой установке операционной системы
Надеюсь, что это объясняет, что происходит, когда вы выполняете команды.
2] Принудительное восстановление WMI
WMI поставляется со встроенным процессом самовосстановления. Когда служба WMI перезапускается или обнаруживает любое повреждение, процедура самовосстановления запускается автоматически. Это происходит двумя способами:
Автообновление : Здесь будут использоваться образы резервных копий, если включена резервная копия VSS (теневое копирование тома).
Автообновление : . В этом процессе перестройки будут генерироваться свежие образы репозитория на основе зарегистрированных MOF. MOFS доступна в реестре здесь:
HKLM Software Microsoft WBEM CIMOM: автоматическое восстановление MOF
Примечание. Автоматическое восстановление MOF является ключевым моментом. Дважды щелкните по нему, чтобы проверить значение.
WMI Самовосстановление не работает
Если самовосстановление не работает, вы всегда можете воспользоваться процессом принудительного восстановления.
Проверьте значение regkey пусто или не здесь:
HKLM Software Microsoft WBEM CIMOM Авто-восстановление MOF
Если приведенный выше ключ пуст, скопируйте и вставьте значение ключа с другого компьютера. Убедитесь, что это из системы, которая эквивалентна рассматриваемому компьютеру.
Далее выполните команду
Winmgmt/resetrepository
Если вы получили сообщение об ошибке «Сброс хранилища WMI не выполнен. Код ошибки: 0x8007041B. Facility: Win32 ”, затем остановите все Dependency Services в службе WMI, выполнив следующие команды:
net stop winmgmt/y Winmgmt/resetrepository
Если оба предложенных исправления не работают, самое время попробовать автоматизированный инструмент.
3] WMI Fixer Tool
Этот инструмент исправит серверный WMI-репозиторий, если он поврежден или возникла связанная с ним проблема. Вы можете скачать WMI Fixer Tool от Technet.
Связанное чтение . WMI вызывает высокую загрузку ЦП.
Много раз Репозиторий WMI повреждается, что приводит к сбою загрузки провайдера. В этом руководстве мы расскажем, как отремонтировать или восстановить WMI Repository on Windows 10. Те, кто не в курсе, Windows Management Instrumentation или WMI — это набор спецификаций от Microsoft для консолидации управления устройствами и приложениями в сети. Это база данных, в которой хранится метаинформация и определения для WMI классы. Только используя их, условия систем могут быть известны.
Репозиторий доступен здесь -% windir% System32WbemRepository. Вкратце, он предоставляет конечным пользователям статус локальной или удаленной компьютерной системы.
Внимание: Не используйте это на сервере кластера 2012
Существуют инструменты командной строки для исправления или восстановления хранилища WMI. Тем не менее, Microsoft предполагает, что лучше всего проверить, есть ли коррупция.
Ниже приведен список ошибок и проблем с разрешениями, которые вы можете увидеть:
- Невозможно подключиться к пространствам имен root по умолчанию или rootcimv2. Сбой с кодом ошибки «0x80041002», указывающим на «WBEM_E_NOT_FOUND».
- Когда вы открываете «Управление компьютером» и щелкаете правой кнопкой мыши пункт «Управление компьютером» (локальное) и выбираете «Свойства», появляется следующее сообщение об ошибке: «WMI: не найден» или зависание при попытке подключения
- 0x80041010 WBEM_E_INVALID_CLASS
- Попытка использовать WBEMTESTи он висит
- Схемы / Объекты отсутствуют
- Странные ошибки подключения / работы (0x8007054e).
Окончательный способ проверить это запустить эту команду в повышенная командная строка.
winmgmt / verifyrepository
Если в хранилище есть проблема, он ответит: «хранилище не соответствует», Если нет, то это что-то еще вызывает проблему. Теперь, когда вы уверены, что коррупция существует, давайте следуем этим советам, чтобы восстановить или перестроить репозиторий WMI.
1] Reset WMI Repository
Откройте командную строку с повышенными привилегиями.
Выполните команду:
winmmgmt / salvagerepository
Затем выполните команду, чтобы увидеть, вернется ли она как
winmgmt / verifyrepository
Если это говорит о том, что Репозиторий не соответствует, тогда вам нужно запустить:
winmgmt / resetrepository
Это поможет вам исправить хранилище WMI. Вот то, что каждый из Команды WMI имею в виду:
salvagerepository: этот параметр при использовании с командой winmmgmt выполняет проверку согласованности. Если обнаружено несоответствие, он восстанавливает хранилище.
verifyrepository: выполняет проверку непротиворечивости в WMI-хранилище.
resetrepository: репозиторий сбрасывается в исходное состояние при первой установке операционной системы
Надеюсь, это объясняет, что происходит, когда вы выполняете команды.
2] Принудительное восстановление WMI
WMI поставляется со встроенным процессом самовосстановления. Когда служба WMI перезапускается или обнаруживает любое повреждение, процедура самовосстановления запускается автоматически. Это происходит двумя способами:
AutoRestore: Здесь он будет использовать резервные образы, если Резервное копирование VSS (Volume Shadow) .
Автосохранение: В этом процессе перестройки будут генерироваться свежие образы репозитория на основе зарегистрированных MOF. MOFS доступна в реестре здесь:
HKLMS SoftwareMicrosoftWBEMCIMOM: автоматическое восстановление MOF
Примечание: Авто-восстановление MOFs является ключевым. Дважды щелкните по нему, чтобы проверить значение.
WMI Самовосстановление не работает
Если самовосстановление не работает, вы всегда можете использовать процесс принудительного восстановления.
Проверьте значение regkey пусто или не здесь:
HKLMSПрограммное обеспечениеMicrosoftWBEMCIMOMAutorecover MOFs
Если приведенный выше ключ пуст, скопируйте и вставьте значение ключа с другого компьютера. Удостоверьтесь, что это от Системы, которая эквивалентна рассматриваемому компьютеру.
Далее выполните команду
Winmgmt / resetrepository
Если вы получили сообщение об ошибке «Сброс хранилища WMI не выполнен. Код ошибки: 0x8007041B. Facility: Win32 ”, затем остановите все Сервисы зависимостей в службе WMI, выполнив следующие команды:
net stop winmgmt / y Winmgmt / resetrepository
Если оба предложенных исправления не работают, самое время попробовать автоматизированный инструмент.
3] WMI Fixer Tool
Этот инструмент исправит серверный WMI-репозиторий, если он поврежден или обнаружен связанный с ним выпуск Вы можете скачать WMI Fixer Tool с Technet.
Оригинал статьи
Я столкнулся с этой ситуацией на днях: мои студенты тестировали управление системными функциями и две машины в домене (на обеих – Windows 10) стали возвращать ошибки при работе с Windows Management Instrumentation. Основной админ ещё не вышел из отпуска, пришлось вспоминать, что я бывший руководитель Отдела ИТ
Сразу отвечу на третий вопрос: без рабочего WMI, на мой взгляд, можно оставлять лишь домашний игровой компьютер, на котором, кроме игр и просмотра видео, больше ничего не делается (разве что дети учатся программировать). В остальных случаях, особенно на корпоративных машинах, тем более в домене, WMI должна работать как часы. Это моё мнение, кто-то может не согласиться.
Теперь о причинах произошедшего: их может быть очень много. Забегая вперед, скажу что на одной машине это произошло из-за того, что на жестком диске закончилось место, а затем был сбой по питанию из-за сломанного ИБП (увы, никто не застрахован; сервера, конечно, защищены от подобного, а обычная рабочая машинка не была). На второй хуже: нефатальный сбой жесткого диска с последующим BSOD. В целом, разобраться с причинами не так уж и важно, главное, выяснить, что причиной не является вирус или попытка взлома. Впрочем, намеренное удаление или случайная порча системных файлов тоже должны быть рассмотрены достаточно пристально.
Восстановление работоспособности WMI следует проводить поэтапно, от щадящих методов к деструктивным. Следует быть готовым к тому, что в самом худшем случае систему придётся переустановить. Не стоит лишний раз напоминать, что большинство команд должно выполняться от имени администратора.
1 этап. Проверка работы сервиса.
Проверяем имеется ли в системе служба Windows Management Instrumentation (Winmgmt)
и включена ли она. Вызываем Службы (в Windows 10 проще всего через Пуск/Средства администрирования/Службы, но я предпочитаю в любой версии Windows, кроме самых старых, напечатать в командной строке services.msc
), ищем Инструментарий управления Windows/Windows Management Instrumentation
, проверяем, запущена ли она:
Если она не запущена, пытаемся запустить, выставим режим запуска в «Автоматически». Если запущена, пытаемся перезапустить (Остановить/запустить). После этого проверяем работоспособность WMI. Проще всего сделать это, выполнив любой WMI-запрос в powershell
(напоминаю, что powershell в Windows 10 запускается через Пуск/Windows PowerShell/Windows Power Shell, но проще, на мой взгляд, запустить командную строку с админовскими правами, а в ней уже набрать powershell
), например, такой: (вы можете выполнить другой, свой любимый :))
Get-WmiObject -List -ComputerName localhost
Если у вас вылетела портянка объектов, всё в порядке. Если же полезли ошибки, значит, работоспособность не восстановлена, переходим ко второму этапу.
Между делом скажу пару слов об официальной утилите Microsoft WMI Diagnosis. Все почему-то наперебой её рекомендуют, как хороший помощник при восстановлении. Увы, я убил достаточно много времени на анализ результатов действия этой утилиты: скрипт создал кучу лог-файлов, через которые продраться можно, если вы никуда не торопитесь, у вас есть куча времени и полкило пуэра/кофе-машина. В причинах сбоев я разобрался быстрее без неё. Вероятность того, что она может помочь непосредственно в скором восстановлении работы WMI – очень мала.
2 этап. Недеструктивное восстановление
Стоит попытаться вначале выполнить перерегистрацию библиотек и рекомпиляцию файлов расширения свойств объектов (Managed Object Format, MOF
) и языковую составляющую этих файлов (MFL
). Практически гарантированно сработает, если попытка WMI-запроса у вас вызывала ошибку вида “Ошибка в файле WMI.MOF” или любом другом MOF-файле. Для этого выполним следующие операции:
- Остановим службу WMI, обязательно запретив её автостарт
- Перерегистрируем все библиотеки в папке Windowssystem32wbem
- Перерегистрируем службы WMI и WMI Provider Host
- Запускаем службу WMI и разрешаем её автостарт
- Рекомпилируем MOF и MFL файлы
Можно собрать всё это в один BAT-файл и запустить:
# пункт 1
sc config winmgmt start= disabled
net stop winmgmt
# пункт 2
cd %windir%system32wbem
for /f %%s in ('dir /b *.dll') do regsvr32 /s %%s
#пункт 3
wmiprvse /regserver
winmgmt /regserver
#пункт 4
sc config winmgmt start= auto
net start winmgmt
#пункт 5
for /f %%s in ('dir /b *.mof') do mofcomp %%s
for /f %%s in ('dir /b *.mfl') do mofcomp %%s
Отмечу, что таким образом я восстановил работу WMI на первой машине. Со второй, увы не получилось. Если у вас не получается, пора переходить к 3му этапу
3 этап. Деструктивное восстановление
Фактически, на 3м этапе мы пересоздаем хранилище WMI, как таковое, которое находится в папке WindowsSystem32WbemRepository и является базой данных, в которой хранятся данные и определения стандартных WMI-классов и статическая информация дополнительных WMI-классов, если они создавались на вашей машине.
Перед операциями проверьте состояние жёсткого диска и файловой системы!!!
Проверяем целостность (На Windows XP и ниже не работает):
winmgmt /verifyrepository
В случае ответа отличного от “База данных WMI согласована”, можно выполнить «мягкое восстановление» командой:
winmgmt /salvagerepository
с последующим перезапуском службы:
net stop Winmgmt
net start Winmgmt
Если мягкое восстановление не помогло, пробуем вернуть хранилище в начальное состояние (последствия: все дополнительные классы WMI, когда-либо зарегистрированные в вашей системе, скорее всего, придётся регистрировать заново):
winmgmt /resetrepository
с последующим рестартом системы. Отмечу, что вторая машина заработала после этого этапа. Последствия были не сильно удручающими, но серьёзными: пришлось переинсталлировать Visual Studio и Delphi Starter, MS Office отказался работать и его пришлось деинсталлировать вручную, удаляя папки, файлы и записи из реестра, с последующей повторной установкой. Также слетели все наши собственные классы WMI.
Но, если и это не помогло, придётся удалять и создавать хранилище заново. Это можно сделать следующим BAT-файлом:
# Остановим службу WMI, обязательно запретив её автостарт
sc config winmgmt start= disabled
net stop winmgmt
# проводим реинициализацию WMI
cd %windir%system32wbem
winmgmt /kill
winmgmt /unregserver
winmgmt /regserver
winmgmt /resyncperf
# создаем на всякий случай резервную копию нашего хранилища в папку WMI_VicoNT_Backup
# у вас, разумеется, может быть другое имя папки
if exist WMI_VicoNT_Backup rd WMI_VicoNT_Backup /s /q
rename Repository Repos_bakup
# воссоздаем хранилище
regsvr32 /s %systemroot%system32scecli.dll
regsvr32 /s %systemroot%system32userenv.dll
for /f %%s in ('dir /b *.dll') do regsvr32 /s %%s
for /f %%s in ('dir /b *.mof') do mofcomp %%s
for /f %%s in ('dir /b *.mfl') do mofcomp %%s
# запускаем службу WMI, заново регистрируем WMI Provider Host
sc config winmgmt start= auto
net start winmgmt
wmiprvse /regserver
Перегружаем компьютер. Если и после этих действий WMI не заработала, путь один – переустановка системы.
Хороший материал, взятый из журнала samag.ru [14], автор Константин Леонтьев. Тем, кто его до сих пор не читает, читать немедленно…
[Вы всё ещё не используете WMI?]
Если ты один из большинства админов, ты частенько грустишь, выглядывая из окна и наблюдая, как некоторые твои собратья ездят на своих «Ягуарах» и «Порше», или готовятся дернуть в Монте-Карло или какое-нибудь другое экзотическое место. И, конечно же, ты говоришь себе: «Я знаю о системном администрировании столько же, сколько и они, но почему именно у них есть клёвые тачки, яхты и часы «Ролекс»?..». Что ж, мы здесь для того, чтобы приоткрыть тебе небольшой секрет. Это все потому, что они знают, как писать WMI-скрипты, а ты – нет! Microsoft TechNet: Bob Wells, Dean Tsaltas, Ethan Wilansky и Greg Stemp |
Начиная карьеру системного администратора, Вы вероятно и не задумывались о том, что вместе с Вашим профессиональным ростом будет расти размер и сложность обслуживаемых систем. И вот наступил момент, когда вы поняли, что нужно принципиально новое решение, для того чтобы справляться с огромным количеством рутины, да ещё и в разных офисах вашей компании. Вероятнее всего, Вы уже немного знакомы с WMI на практике и используете некоторые готовые сценарии WMI для решения повседневных задач. Но согласитесь, что эффективное использование технологии начинается только тогда, когда вы понимаете ее архитектуру и четко представляете весь спектр возможностей, которые эта технология может вам предоставить.
Основная моя цель – кратко изложить основы, необходимые для эффективного использования вами этой технологии и представить вам набор рецептов по ее применению в реальных условиях.
Вы получите практический навык работы со всеми основными средствами WMI, выполнив несколько простых, но весьма полезных упражнений. Я предполагаю, что вы немного знакомы с программированием на VBScript и с азами языка SQL, а также имеете общее представление об объектно-ориентированном программировании. Обратите внимание на готовые примеры кода, которые помогут вам в Вашей работе.
Что такое WMI?
Формально: аббревиатура WMI – это Windows Management Instrumentation (инструментарий управления Windows). Из названия понятно, для чего создана и применяется эта технология. Стоит лишь добавить, что она давно перешагнула рамки управления только операционной системой Windows и позволяет контролировать множество других совместимых с ней приложений.
По своей сути WMI – это расширенная и адаптированная компанией Microsoft реализация стандарта WBEM (WebBased Enterprise Management компании DMTF Inc [1]). В основе WBEM лежит идея создания универсального интерфейса мониторинга и управления к различным системам и компонентам распределенной информационной среды предприятия с использованием объектно-ориентированной идеологии и широко распространенных веб-технологий представления информации: протоколов XML и HTTP. Стандарт WBEM является правопреемником стандарта DMI (Desktop Management Interface).
В основе структуры представления данных в стандарте WBEM лежит CIM (Common Information Model – модель информации общего типа), реализующая объектно-ориентированный подход к представлению компонентов систем как классов со своим набором свойств и методов, а также принципов наследования.
Основное средство для описания новых элементов модели CIM – это синтаксис языка Managed Object Format (MOF), который является текстовым и легко понятным человеку. Таким образом, любое приложение или драйвер в операционной системе, которая поддерживает стандарт WBEM, может добавить к системной модели CIM свой набор классов. Такое расширение модели CIM позволяет легко интегрировать в единую систему мониторинга и управления все новые и новые приложения. Для этой интеграции приложение должно лишь зарегистрировать свои классы в существующей модели CIM и обеспечить стандартные вызовы встроенных процедур для создания объектов этих классов и наполнения их свойствами и методами. Набор этих процедур оформляется, как WMI Provider – специальная библиотека, являющаяся мостом между любым приложением и ядром службы WMI.
Таким образом, WMI – это открытая унифицированная библиотека (репозиторий) однотипных интерфейсов доступа к параметрам, настройки и свойствам различных систем и их компонентов. Архитектура WMI представлена на рис. 1.
Рисунок 1. Архитектура WMI
Многие производители программного и аппаратного обеспечения ведут разработку ПО в соответствии со стандартом WBEM. Как следствие, это ПО совместимо и с WMI, а значит, может управляться через единый и удобный интерфейс.
Классы, объекты, свойства и методы
Поскольку WMI построена по объектно-ориентированному принципу, то все данные об операционной системе, ее свойствах, управляемых приложениях и обнаруженном оборудовании представлены в виде объектов. Каждый тип объекта описан классом, в состав которого входят свойства и методы. Определения классов описаны в MOF-файлах, а объекты этих классов с заполненными свойствами и доступными методами при их вызове возвращаются WMI-провайдерами. Управляет созданием и удалением объектов, а также вызовом их методов служба CIM Object Manager.
Получается, что если мы хотим управлять настройками сетевого адаптера, то мы должны запросить у CIM Object Manager экземпляр объекта нужного нам сетевого адаптера (забегая вперед, скажу, что этот объект принадлежит классу Win32_NetworkAdapterConfiguration) и вызвать нужные нам методы. В частности, для того чтобы обновить аренду адреса на DHCP сервере, достаточно вызвать метод RenewDHCPLease экземпляра объекта Win32_NetworkAdapterConfiguration.
Обзор средств работы с WMI для администратора
Начнем фактическое знакомство с WMI с обзора утилит, которые позволяют вам работать с WMI на ОС семейства Windows. Условно разделим этот набор утилит на поставляемые с операционной системой по умолчанию и набор утилит, которые потребуется скачивать с сайта компании Microsoft. К первой категории относятся следующие утилиты:
• wmimgmt.msc – оснастка консоли MMC, позволяющая в целом управлять самой системой WMI на выбранном компьютере.
• Winmgmt.exe – консольная утилита управления WMI. Выполняет аналогичные действия, что и консоль MMC wmimgmt.msc. Кроме того, является исполняемым файлом сервиса WMI в системе. Для запуска из консоли используется с опцией /exe (winmgmt.exe /exe).
• Wbemtest.exe – графическая утилита для интерактивной работы с WMI. Удобна для тестирования классов и методов, просмотра свойств и т. п.
• Wmic.exe – консольная утилита для вызова объектов и методов WMI (WMI Console) – присутствует только в Windows XP и Windows Server 2003.
• mofcomp.exe – компилятор MOF-файлов. Служит для расширения репозитория WMI и тонких операций с библиотекой классов WMI, а также для «ремонта» нарушенного репозитория.
Ко второй категории средств для работы с WMI, которые требуется дополнительно устанавливать, относится:
• WMI Code Creator 1.0 – очень удобная и полезная утилита для создания готовых сценариев WMI. Поддерживает языки Visual Basic Script, C# и Visual Basic .NET [2].
• WMI Administrative Tools – комплект средств в составе: WMI CIM Studio, WMI Event Registration, WMI Event Viewer и WMI Object Browser). Удобная среда разработки и тестирования WMI-классов и методов [3].
• Scriptomatic 2.0 – мастер в формате Hyper Text Application (HTA). Удобна для создания готовых сценариев и на различных скриптовых языках. Поддерживает Visual Basic Script, Perl, Java Script и Python [4].
• Tweakomatic Utility – утилита в формате Hyper Text Application (HTA). Содержит множество настроек системы, обычно доступных через утилиты-твикеры (например, Windows XP Power Toys TweakUI), для которых позволяет сгенерировать WMI-скрипты для их автоматической настройки. Весьма полезна при разработке сценариев автоматизированной установки и настройки [5].
Все утилиты, относящиеся ко второй категории, можно бесплатно скачать с сайта компании Microsoft по ссылкам, перечисленным в конце статьи. Полезно будет так же посетить раздел загрузки средств работы со скриптами [6] и общий раздел загрузки средств работы с WMI [7].
Для того, чтобы рассмотреть возможности и особенности всех средств работы с WMI, которые перечислены выше, не хватит и целого журнала, поэтому мы кратко остановимся на некоторых из них, на мой взгляд, наиболее полезных и (или) наиболее употребимых. Собственно, к таким я отношу следующие утилиты: WBEMTEST, WMIC, WMI Administrative Tools и довольно новую, но весьма полезную и удачную утилиту WMI Code Creator 1.0.
Надо отметить, что существуют и другие утилиты и средства работы с WMI, в том числе разработанные не компанией Microsoft, однако формат статьи не позволяет нам на них останавливаться сколько-нибудь подробно. Об одном из этих средств я считаю своим долгом хотя бы упомянуть в этой статье – это ADSI Scriptomatic [8], позволяющее создавать скрипты для управления службой каталогов Microsoft Active Directory.
Все примеры в этой статье протестированы на операционной системе Windows XP Service Pack 2, однако должны также корректно работать и на более ранних версиях OS Windows вплоть до Windows 2000. Если вам потребуется использовать WMI на более ранних версиях ОС Windows, то вам необходимо будет установить WMI Core Components 1.5 [9] и последнюю версию Windows Scripting Host [10, 11] на эти ОС.
Знакомимся с утилитой WBEMTEST
Чтобы прямо сейчас посмотреть, какой набор классов определен в репозитории WMI на вашем персональном компьютере, достаточно запустить утилиту wbemtest.exe и установить флажок «Enable All Privileges», как показано на рис. 2.
Рисунок 2. Основное окно утилиты WBEMTEST
Далее нужно нажать кнопку «Connect…», в поле пространства имен вписать rootCIMv2, как это показано на рис. 3, и нажать кнопку «Connect».
Рисунок 3. Окно настройки подключения к репозиторию WMI утилиты WBEMTEST
Рисунок 4. Основное окно утилиты WBEMTEST после подключения к репозиторию WMI
Затем нажмите кнопку «Enum Classes…», выберите «Recursive», не заполняйте поле суперкласса и нажмите «Ok». В результате вы получите список классов, определенный в вашем репозитории WMI, в пространстве имен CIMv2. Найдите среди всех класс с названием Win32_OperatingSystem (CIM_OperatingSystem), как это показано на рис. 5.
Рисунок 5. Окно результатов запроса со списком всех классов WMI пространства имен CIMv2
Дважды щелкните курсором мыши по классу Win32_OperatingSystem, посмотрите его свойства. Пример того, как это выглядит, показан на рис. 6.
Рисунок 6. Окно свойств класса Win32_OperatingSystem
Далее нужно нажать кнопку «Instances» и в открывшемся окне дважды щелкнуть курсором мыши по строке в списке экземпляров операционных систем. В открывшемся окне свойств экземпляра операционной системы найдите свойство («Property») с названием «Name», как это показано на рис. 7.
Рисунок 7. Окно свойств экземпляра объекта класса Win32_OperatingSystem
Дважды кликните по свойству курсором мыши. В открывшемся окне редактора свойств, которое показано на рис. 8, скопируйте отображаемое значение в буфер обмена. Оно пригодится нам в дальнейшем.
Рисунок 8. Окно со значением свойства Name экземпляра объекта класса Win32_OperatingSystem
Далее закройте все окна, кроме основного окна программы wbemtest. В блокноте отредактируйте строку из буфера обмена следующем образом:
— Заключите строку в кавычки.
— До первых кавычек добавьте следующий текст: «Win32_Operating-System.Name=».
— Замените все одинарные обратные слеши на двойные.
В итоге у вас должна получиться примерно следующая строка (в зависимости от версии ОС и логического диска, куда она установлена):
Win32_OperatingSystem.Name=»Microsoft Windows XP Professional|C:\WINDOWS|\Device\Harddisk0\Partition1″
Теперь давайте выполним следующее упражнение с утилитой wbemtest. В уже открытом окне утилиты wbemtest нажмем кнопку «Execute Method…» и в окошко «GetObjectPath» вставим строку, которую мы подготовили в блокноте. В появившемся окне (см. рис. 9) вызова метода экземпляра объекта выберите метод Reboot и нажмите кнопку «Execute!».
Рисунок 9. Окно вызова метода для экземпляра объекта класса Win32_OperatingSystem утилиты WBEMTEST
Поздравляю, Вы только что отправили свою операционную систему в перезагрузку, используя WMI. Если вы вдруг получили вместо перезагрузки сообщение об ошибке 0x80041062 «Privilege not held», то это означает, что вы забыли установить опцию «Enable All Privileges» до подключения к репозиторию WMI.
Теперь следует сказать (пока Windows перезагружается), что при подключении к пространству имен WMI вы можете подключаться не только на локальной машине, но и как следует из обзора WMI к любой удаленной. Главное, обладать на той машине необходимыми правами. Но об этих правах позднее! Для подключения к удаленной машине в окне подключения достаточно в поле Name Space указать строку вида \rootCIMv2 и указать учетные данные пользователя, обладающего необходимыми правами (например, Administrator). Пример этого показан на рис. 10.
Рисунок 10. Окно подключение к пространству имен WMI с явным указанием имени сервера
Не пробуйте подключаться к локальной машине, на которой запрашиваются объекты и методы WMI (например, на той, на которой сейчас выполняется утилита wbemtest), используя отличные от текущих учетные данные – все равно это у вас не получится. Это специальная защита для повышения локальной безопасности WMI, но о ней мы поговорим позже.
Утилита WMIC
Чтобы воспользоваться этой очень важной и полезной для администратора утилитой, достаточно запустить интерпретатор командной строки cmd.exe и в строке приглашения набрать WMIC. После этого у вас появится приглашение консоли WMI, как это показано на рис. 11.
Рисунок 11. Командное окно с запущенной утилитой WMIC в интерактивном режиме
Для получения справки по всем командам, доступным из консоли WMIC, достаточно в строке приглашения ввести команду «/?». Синтаксис каждой команды или глобальной опции вы можете посмотреть, введя ее название и знак вопроса. Например:
Так мы работаем с утилитой WMIC в интерактивном режиме. Однако ничто не мешает нам использовать ее и в пакетном режиме из наших BAT/CMD-сценариев. Например, в приглашении командной строки CMD можно написать:
и получить тот же результат.
Утилита WMIC создана для удобства использования WMI прямо из командной строки, поэтому наиболее употребимые классы WMI доступны для использования под псевдонимами (ALIAS). Вы можете самостоятельно определить псевдонимы для тех классов, для которых это еще не сделано, или добавить новые псевдонимы для тех классов WMI, которые уже их имеют.
Список псевдонимов, которые определены на Windows XP Service Pack 2 по умолчанию с их кратким описанием, приведены в таблице 1.
Таблица 1. Список псевдонимов утилиты WMIC и соответствие их классам WMI
Псевдоним | Описание | Имя класса WMI |
BASEBOARD | Управление материнской платой, она также называется motherboard, или системная плата. | Win32_BIOS |
BIOS | Управления базовыми сервисами ввода/вывода (Basic input/output services, BIOS). | Win32_BaseBoard |
BOOTCONFIG | Управление конфигурацией загрузки (Boot configuration management). | Win32_BootConfiguration |
CDROM | Управление приводом CD-ROM. | Win32_CDROMDrive |
COMPUTERSYSTEM | Управление системой компьютера. | Win32_ComputerSystem |
CPU | Управление процессовром. | WIN32_PROCESSOR |
CSPRODUCT | Получение от SMBIOS информации о компьютере как системном продукте. | Win32_ComputerSystemProduct |
DATAFILE | Управление данными файлов (DataFile Management). | CIM_DataFile |
DCOMAPP | Управление приложениями (DCOM Application management). | WIN32_DCOMApplication |
DESKTOP | Управление рабочим столом пользователя (User’s Desktop management). | WIN32_DESKTOP |
DESKTOPMONITOR | Desktop Monitor management | WIN32_DESKTOPMONITOR |
DEVICEMEMORYADDRESS | Управление адресами памяти устройств (Device memory addresses management). | Win32_DeviceMemoryAddress |
DISKDRIVE | Управление диском на физическом уровне (Physical disk drive management). | Win32_DiskDrive |
DISKQUOTA | Управление квотами NTFS пространства диска (Disk space usage for NTFS volumes). | Win32_DiskQuota |
DMACHANNEL | Управление каналами прямого доступа к памяти (Direct memory access, DMA channel management). | Win32_DMAChannel |
ENVIRONMENT | Управление настройками системного окружения (System environment settings management) | Win32_Environment |
FSDIR | Управление директориями файловой системы (Filesystem directory entry management). | Win32_Directory |
GROUP | Управление группами учетных записей (Group account management). | Win32_Group |
IDECONTROLLER | Управление контролером диска IDE (IDE Controller management). | Win32_IDEController |
IRQ | Управление сигналами прерываний (Interrupt request line, IRQ management). | Win32_IRQResource |
JOB | Предоставляет доступ к назначенным заданиям (jobs scheduled) с использованием службы назначенных заданий (schedule service). | Win32_ScheduledJob |
LOADORDER | Управление службами системы, которые задают зависимости запуска (execution dependencies). | Win32_LoadOrderGroup |
LOGICALDISK | Управление дисковыми локальными устройствами хранения (Local storage device management). | Win32_LogicalDisk |
LOGON | Управление сессиями пользователей (LOGON Sessions). | Win32_LogonSession |
MEMCACHE | Управление кэшем (Cache memory management). | WIN32_CACHEMEMORY |
MEMLOGICAL | Управление памятью системы (как сконфигурирована карта памяти, и как память доступна для приложений и сервисов). | Win32_LogicalMemoryConfiguration |
MEMPHYSICAL | Управление памятью компьютера на физическом уровне (Computer system’s physical memory management). | Win32_PhysicalMemoryArray |
NETCLIENT | Управление клиентом сети (Network Client management). | WIN32_NetworkClient |
NETLOGIN | Управление информацией учетной записи сети для отдельного пользователя. | Win32_NetworkLoginProfile |
NETPROTOCOL | Управление протоколами и их сетевыми характеристиками. | Win32_NetworkProtocol |
NETUSE | Управление активным сетевым соединением. | Win32_NetworkConnection |
NIC | Управление сетевым адаптером (Network Interface Controller, NIC). | Win32_NetworkAdapter |
NICCONFIG | Управление конфигурацией сетевого адаптера. | Win32_NetworkAdapterConfiguration |
NTDOMAIN | Управление доменом NT. | Win32_NTDomain |
NTEVENT | Получение доступа к логам событий (Entries in the NT Event Log). | Win32_NTLogEvent |
NTEVENTLOG | Управление файлом лога (NT eventlog file management). | Win32_NTEventlogFile |
ONBOARDDEVICE | Управление общими адаптерами, установленными в материнскую плату (system board). | Win32_OnBoardDevice |
OS | Управление инсталлированными операционными системами. | Win32_OperatingSystem |
PAGEFILE | Управление виртуальной памятью и её свопом на диск. | Win32_PageFileUsage |
PAGEFILESET | Установка параметров файла свопа. | Win32_PageFileSetting |
PARTITION | Управление логическими разделами физического диска (Management of partitioned areas of a physical disk). | Win32_DiskPartition |
PORT | Управление портами ввода/вывода (I/O port management). | Win32_PortResource |
PORTCONNECTOR | Управление физическим соединением портов (Physical connection ports management). | Win32_PortConnector |
PRINTER | Printer device management | Win32_Printer |
PRINTERCONFIG | Управление конфигурацией принтера. | Win32_PrinterConfiguration |
PRINTJOB | Управление заданиями принтера. | Win32_PrintJob |
PROCESS | Управление процессами. | Win32_Process |
PRODUCT | Управление задачей инсталляционных пакетов (Installation package task management). | Win32_Product |
QFE | Быстрое исправление ошибок (Quick Fix Engineering). | Win32_QuickFixEngineering |
QUOTASETTING | Установка информации о квотах, установленных для тома диска (Setting information for disk quotas on a volume). | Win32_QuotaSetting |
RECOVEROS | Информация, которая была захвачена из памяти при крахе системы. | Win32_OSRecoveryConfiguration |
REGISTRY | Управление реестром системы. | Win32_Registry |
SCSICONTROLLER | Управление контроллером SCSI. | Win32_SCSIController |
SERVER | Управление информацией о сервере. | Win32_PerfRawData_PerfNet_Server |
SERVICE | Управление прикладными сервисами. | Win32_Service |
SHARE | Управление общими сетевыми ресурсами (Shared resource management). | Win32_Share |
SOFTWAREELEMENT | Управление элементами программных продуктов, установленных в системе. | Win32_SoftwareElement |
SOFTWAREFEATURE | Управление подмножествами программных продуктов SoftwareElement. | Win32_SoftwareFeature |
SOUNDDEV | Управление устройством звука. | WIN32_SoundDevice |
STARTUP | Управление командами автозапуска при входе пользователя в систему. | Win32_StartupCommand |
SYSACCOUNT | Управление учетной записью системы (System account management). | Win32_SystemAccount |
SYSDRIVER | Управление системным драйвером для базовой службы (Management of the system driver for a base service). | Win32_SystemDriver |
SYSTEMENCLOSURE | Управление физическим доступом к корпусу компьютера (Physical system enclosure management). | Win32_SystemEnclosure |
SYSTEMSLOT | Управление физичесими соединениями, включая порты, слоты и периферийные устройства, и точками проприетарных соединений. | Win32_SystemSlot |
TAPEDRIVE | Управление накопителем на магнитной ленте. | Win32_TapeDrive |
TEMPERATURE | Управление данными от датчика температуры (электронный термометр). | Win32_TemperatureProbe |
TIMEZONE | Управление данными часового пояса (Time zone data management). | Win32_TimeZone |
UPS | Управление источником бесперебойного питания (Uninterruptible power supply, UPS). | Win32_UninterruptiblePowerSupply |
USERACCOUNT | Управление учетными записями пользователей (User account management). | Win32_UserAccount |
VOLTAGE | Управление данными сенсора напряжения (электронный вольтметр). | Win32_VoltageProbe |
VOLUMEQUOTASETTING | Связывает установки дисковой квоты с определенным дисковым томом. | Win32_VolumeQuotaSetting |
WMISET | Управляет рабочими параметрами службы WMI. | Win32_WMISetting |
Теперь давайте попробуем использовать утилиту WMIC для работы с WMI из командной строки. Для начала выйдите из интерактивного режима консоли WMIC командой exit. Вы оказались в среде командного интерпретатора CMD. В приглашении наберите команду:
Вы получите список процессов, запущенных на вашем локальном компьютере. Теперь выполните команду:
wmic process list brief | find "cmd.exe"
Теперь список процессов ограничен только теми процессами, в имени исполняемого модуля которых присутствует строка «cmd.exe». Обратите внимание на PID процесса(ов).
Давайте попробуем отобрать интересующие нас процессы, используя непосредственно WMI и не прибегая к стандартным средствам командной строки. Для этого просто напишите:
wmic process where description='cmd.exe' list brief
Сравните полученные результаты. Запомните PID процесса CMD.EXE.
Вызовем метод Terminate для экземпляра объекта WMI. Так мы завершим интересующий нас процесс в системе. Для того чтобы однозначно определить процесс, который мы хотим завершить, нам нужно использовать его PID или какой-либо другой набор атрибутов процесса, которые позволяют его однозначно отличить от множества других процессов в системе. Для завершения процесса нам нужно вызвать метод WMI. Для этого существует команда CALL. Для того чтобы вывести справку по всем методам, применимым к объектам типа PROCESS (Win32_Process), наберите команду:
Среди них обратите внимание на метод Terminate – он принимает в качестве единственного входного параметра значение типа UINT32 (беззнаковое 32-разрядное целое) в качестве индекса причины завершения процесса. В данном случае этот параметр аналогичен Exit-коду.
Запустите четыре разных экземпляра процесса cmd.exe (откройте 4 командных окна). Еще раз выполните команду:
wmic process where description='cmd.exe' list brief
В результате вы получите в ответ примерно следующее:
HandleCount Name Priority ProcessId ThreadCount WorkingSetSize
28 cmd.exe 8 4648 1 2494464
28 cmd.exe 8 5156 1 2498560
28 cmd.exe 8 4940 1 2498560
31 cmd.exe 8 612 1 2703360
Итак, чтобы завершить конкретный процесс, просто наберите:
wmic process where processid='****' call terminate(0)
вместо звездочек укажите PID нужного вам экземпляра процесса cmd.exe.
Теперь давайте одной командой завершим все оставшиеся процессы cmd.exe, для этого просто введите команду:
wmic process where description='cmd.exe' call terminate(0)
Что за конструкция where и как еще ее можно использовать, мы разберем чуть позже в разделе «Язык запросов WQL».
Для того чтобы подключиться к репозиторию WMI на другом компьютере и выполнять все те же действия, при условии, что наша учетная запись обладает достаточными правами, нам всего лишь нужно немного модифицировать нашу командную строку. Теперь наши команды должны выглядеть примерно так:
wmic /NODE:server01 /USER:DOMAINAdministrator /PASSWORD:qwerty /PRIVILEGES:ENABLE process where description='cmd.exe' list brief
Если же вы хотите выполнить какие-то действия, используя WMI не с одним, а с целой группой компьютеров, то достаточно написать команду с использованием WMIC и ключом «/node:@serverslist.txt»:
wmic /NODE:@serverslist.txt /USER:DOMAINAdministrator /PASSWORD:qwerty /PRIVILEGES:ENABLE process where description='cmd.exe' list brief
В файле serverlist.txt в столбец или в строку должны быть перечислены имена (IP-адреса) хостов, на которых необходимо выполнить это действие.
В довершение краткого описания утилиты WMIC, следует сказать об еще одной, поистине замечательной, ее особенности – форматировании вывода. Практически все команды WMIC, которые возвращают информацию, могут ее форматировать разными способами. Для этого используется ключ «/format:». Форматирование производится с использованием технологии XSLT (шаблонов для преобразования XML). По умолчанию уже определен ряд готовых преобразований: CSV, HFORM, HMOF, HTABLE, HXML, RAWXML, TABLE, VALUE. Вы так же сами можете определить дополнительные шаблоны форматирования в формате XSLT и использовать их совместно с WMIC.
Краткое практическое знакомство c WMI CIM Studio
Это набор приложений Microsoft Internet Explorer, который позволяет с одной стороны очень тонко, с другой стороны довольно удобно работать с WMI. При этом вы можете как просматривать классы и вызывать методы, так и создавать события и даже модифицировать репозиторий WMI. Поэтому будьте очень осторожны. Если вы запускаете WMI CIM Studio на Windows XP Service Pack 2, то Internet Explorer предупредит вас о потенциальной угрозе безопасности. Вам следует разрешить заблокированное содержимое ActiveX.
На рис. 12 показан вид окна WMI CIM Studio. Слева вы видите набор классов WMI и их иерархии в том пространстве имен WMI, которое вы выбрали при подключении. Справа перечислены все свойства выбранного класса. Все методы класса перечислены на закладке Methods, а на закладке Associations показана «родословная» этого класса и других классов, которые выведены из него.
Рисунок 12. Окно утилиты WMI CIM Studio с открытыми свойствами класса Win32_OperatingSystem
Если вы хотите посмотреть все экземпляры объектов выбранного класса, существующие в вашей системе, то достаточно нажать кнопку со значком списка (четвертая справа кнопка в правой панели кнопок).
WMI CIM Studio очень удобный инструмент для поиска классов и свойств в огромном море репозитория WMI. Для поиска нажмите кнопку со значком бинокля и введите шаблон для поиска, например «network». Выберите область поиска (Class names, Class description, Property names) и нажмите «Go!». В целом WMI CIM Studio очень хороший инструмент для поиска и исследования репозитория WMI и для интерактивного анализа состояния экземпляров объектов WMI.
Язык запросов WQL
Теперь нам следует разобраться, что же такое WQL, а также каким образом в разделе, где описана работа WMIC, мы делали выборку объектов WMI по определенным критериям. Разбирая эту тему, полезно вспомнить, что объектно-ориентированная модель представления данных хорошо ложится на структуру реляционных баз данных. В частности можно провести следующие аналогии: определение таблицы данных (поля и их типы) – это классы объектов, строки в конкретной таблице – это экземпляры объектов данного класса. Каждое поле (столбец) в таблице – это свойство всех объектов данного класса. Каждая ячейка в конкретной строке – это свойство (property) конкретного экземпляра объекта. Связи таблиц и представления можно рассматривать как частный случай наследования. Триггеры и встроенные процедуры исходя из этой аналогии – это методы классов.
Собственно, для того чтобы удобно было работать с множественными экземплярами объектов WMI, используется язык WMI Query Language (WQL), который является подмножеством ANSI SQL.
Основное отличие WQL от ANSI SQL состоит в том, что WQL не позволяет производить изменения в данных WMI, т. е. фактически в WQL поддерживается лишь один оператор SQL: select. Кроме того, в операторе select языка WQL не поддерживаются следующие ключевые слова: DISTINCT, COUNT, JOIN, SUBSTRING, ORDER BY, UPPER, LOWER и DATEPART (эти ключевые слова поддерживаются в варианте Extended WQL (eWQL), реализованном в Microsoft SMS 2.0 и SMS 2003). Не поддерживаются арифметические операторы. Кроме того конструкции IS и IS NOT могут применяться только в сочетании с константой NULL. Языком WQL поддерживается оператор LIKE. Более подробно про шаблоны, применяемые совместно с оператором LIKE в WQL, можно ознакомиться в оригинальном описании WMI на сайте Microsoft [12, 13].
Ниже приведен пример некоторых типичных WQL-запросов:
SELECT * FROM Win32_LogicalDisk WHERE FileSystem IS NULL SELECT * FROM Win32_LogicalDisk WHERE FileSystem IS NOT NULL SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS" SELECT * FROM Win32_DiskDrive WHERE Partitions < 2 OR SectorsPerTrack > 100 SELECT * FROM Win32_LogicalDisk WHERE (Name = "C:" OR Name = "D:") AND FreeSpace > 2000000 AND FileSystem = "NTFS" SELECT * FROM Win32_NTLogEvent WHERE Logfile = 'Application' SELECT * FROM Meta_Class WHERE __Class LIKE %Win32% SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA "Win32_NTLogEvent" GROUP WITHIN 600 BY TargetInstance.SourceName HAVING NumberOfEvents > 25
Вы можете поупражняться в запросах WMI с помощью уже хорошо известной вам утилиты WBEMTEST, нажав кнопку «Query» в ее главном окне.
Теперь вспомните утилиту командной строки WMIC, функции которой мы разбирали немного выше. В ее синтаксисе также могут использоваться WQL-запросы для удобства работы с наборами объектов одного класса. Чтобы использовать уже имеющиеся и проверенные WQL-запросы (большинство из них удобнее всего проверять утилитой WBEMTEST), из командной строки достаточно отбросить у WQL-запроса первую часть: «select * from». Затем заменить имя класса на его алиас (псевдоним) из таблицы 1 и при необходимости добавить после запроса вызов метода, формат вывода списка или запрос свойства объекта. Примеры того, что при этом получается, я уже приводил выше.
Если же среди псевдонимов в таблице 1 нет нужного вам класса, то есть два пути решения. Первый – добавить новый псевдоним для нового класса. Этот путь хорош, если с этим классом из WMIC вы будете работать только на этом компьютере. Если же вы хотите использовать команду wmic на разных компьютерах, в том числе и на тех, на которых такой алиас вы не определяли, то можно воспользоваться вторым способом. Второй способ позволяет явно использовать настоящее имя класса WMI при обращении к нему с помощью WMIC. Для этого используйте следующий синтаксис:
wmic path Win32_LogicalDisk WHERE FileSystem='NTFS' get /value
Заключение
Во второй части статьи [15] обсудим написание сценариев с использованием WMI и WSH. Будут разобраны особенности использования WMI в скриптах, из тех, которые обычно вызывают наибольшие затруднения у людей, начинающих работать с этой технологией. К таким темам я отношу: построение moniker string, использование различных пространств имен WMI, связка WMI и COM, использование различных языков программирования вместе с WMI, имперсонация, аутентификация и привилегии. Наконец, наиболее интересные моменты, связанные с подключением к удаленным компьютерам и обработкой системных событий с помощью WMI. В заключении мы обсудим готовые продукты, использующие WMI и стратегию развития этой технологии, а так же ее применения в информационных системах предприятий.
[Ссылки и литература]
1. Distributed Management Task Force Inc. site:dmtf.org.
2. WMICodeCreator.zip site:microsoft.com — WMI Code Creator 1.0.
3. WMITools.exe site:microsoft.com — WMI Administrative Tools.
4. Scriptomatic site:microsoft.com.
5. Tweakomatic Utility site:microsoft.com.
6. Microsoft Scripting Downloads Catalog site:msdn.microsoft.com.
7. WMI Downloads catalog site:msdn.microsoft.com.
8. ADSI Scriptomatic site:microsoft.com.
9. WMI Core 1.5 for Windows 9x, NT 4.0 SP4 site:microsoft.com.
10. Windows Scripting Host 5.6 for Windows 9x/NT/ME site:microsoft.com.
11. Microsoft Windows Script 5.6 Documentation site:microsoft.com.
12. WQL Keywords and description site:msdn.microsoft.com.
13. Windows Management Instrumentation site:msdn.microsoft.com.
14. Вы всё ещё не используете WMI? Часть 1 site:samag.ru.
15. Вы всё ещё не используете WMI? Часть 2 site:samag.ru.
The thing called Windows Management Instrumentation or WMI comes installed on each modern operating system of Microsoft, including Windows 2000, Windows XP, Windows 2003, Windows Vista, and Windows 2008. If you want to enable the remote access to WMI, here are the steps that you can follow.
- Enable remote WMI requests
To get WMI working, this setting is usually all that you need to change. First of all, go to Administrative Tools > Computer Management in the target server. Then, expand Service and Applications. The next thing that you will have to do is to right click for Properties on WMI Control. After that, choose the Security tab. The fifth step is to press the Security button. Lastly, add the monitoring user if needed, and then make sure to check Remote Enable for the user or group that will be requesting the WMI data. When everything is done, go back and see if the issue is fixed. The process of reporting to re-generating might takes a couple of minutes so please be patient.
- Allow WMI via Windows firewall
Each user, including non-administrators, is able to read or query WMI data on the local computer. a connection has to be made from the management computer where the monitoring software is installed for reading WMI data on a remote server to the server that you are monitoring or the target of the server. If the target server is running Windows Firewall or Internet Connection Firewall just like that one shipped with Windows XP and Windows 2003, then you have to tell it to allow remote WMI requests. This one is able to only be done at the Command Prompt. Please run the following on the target computer if it is running a Windows firewall:
netsh firewall set service RemoteAdmin enable
- Enable DCOM calls on the remote machine
In case the account that you are using to monitor the target server is not an administrator on the target server, you will have to enable the non-administrator in order to interact with DCOM by performing the simple instructions listed here . You should follow the steps to grant DCOM remote launch and activation permissions for a user or group and to grant DCOM remote access permissions.
In case no one of the things above did not help you, you are recommended to install the WMI Administrative Tools from Microsoft. This one includes a WMI browser that will allow you to connect to a remote machine and browse through the WMI information. It is so good to isolate any connectivity or rights issues in a more direct and simple environment. Once the WMI browser is able to access a remote machine, the products should be able to as well.
There are a lot of kinds of WMI Administrative Tools. One of them is called PowerShell. PowerShell is the name of the command line interface that was designed by Microsoft to help it to complete against the operating system such as Unix and Linux. This one has gathered a lot of features that have turned Linux and Unix to be such excellent operating systems. Until now, it has been able to be a stable and simple program to learn the interface that offers you much more than just WMI controls. However, it does not mean that PowerShell does not have great functionality with WMI.
There are tons of commands that are able to be built around the WMI interactions from within the thing called PowerShell, however the most important thing is scripting all the functions successfully. For those system administrators, you may already know about the ability that comes from using PowerShell in scripts and batch files. On the other hands, for those who have never heard of it before, now it is time for you to learn more about how to use it and what it is for. PowerShell is free and you can download it here https://msdn.microsoft.com/en-us/powershell/.
The second recommended tool is named WMIE or Windows Management Instrumentation Explorer. This one is an amazing project that has been developed with the purpose of providing you with a single viewing pane that shows up information such as WMI Namespaces, Classes, Instance and Properties which all of them are related to a clean interface. The main inspiration for the design of this app was to make browsing WMI data more accessible and more easy to use, as well as maintaining the high levels of functionality and usefulness. If you want to successfully run it, you need to make sure that you have the full version of the Microsoft .NET Framework 4.0 installed on the target system that you want to run it from. Actually, you can also install .NET Framework 4.5.1. The good news is, WMIE is free and you are able to download it on here: https://wmie.codeplex.com/.
There are some interesting features of WMIE, those include method execution, browse and view WMI objects in a single pane of view, Asynchronous and Synchronous mode for enumeration, connect as alternate credentials to remote computers, filter classes and instances matching certain criteria, and SMS mode providing supporting functionality for Configuration Manager.
There is also WMIX Free WMI Tools that allows you to do Windows administration tasks remotely without agents, which is what WMI enables you to do. It is really different compared to directly using WMI tools that you have to understand how to script or how to interpret vast amounts of data. It extracts and shows up all of this data for you in an easy to use window. After you have made your query, it allows you to export the command that underpins the query to well-known formats such as Visual Basic WMI Scripts or PowerShell. On the other words, once the hard work has been done by the application, you are able to simply extract the commands that you need and then integrate everything into the scripting or programs.
AUTHOR BIO
On my daily job, I am a software engineer, programmer & computer technician. My passion is assembling PC hardware, studying Operating System and all things related to computers technology. I also love to make short films for YouTube as a producer. More at about me…