WMI (Windows Management Instrumentation) — ключевой компонент Windows, обеспечивающий доступ к системной информации, выполнение скриптов и взаимодействие со сторонними приложениями. Проблемы с WMI, такие как повреждение репозитория или ошибки службы, могут нарушить работу системы, групповых политик, агентов SCCM/SCOM или скриптов. В этой статье мы разберем, как диагностировать и устранить ошибки WMI в Windows 10, 11 и Windows Server (2016/2019/2022), включая проверку службы, восстановление репозитория и перекомпиляцию MOF-файлов.
Признаки проблем с WMI
Ошибки WMI могут проявляться следующим образом:
— Ошибки в журналах событий: 0x80041002 (WBEM_E_NOT_FOUND), 0x80041010 (WBEM_E_INVALID_CLASS), Invalid namespace, Invalid class, Failed to initialize WMI classes.
— Некорректная работа WMI-фильтров в групповых политиках (GPO).
— Медленное выполнение или ошибки WMI-запросов в скриптах (Get-WmiObject, Get-CimInstance).
— Проблемы с агентами SCCM или SCOM.
— Ошибки сторонних приложений, использующих WMI.
Диагностика проблем с WMI
Проверка службы Winmgmt
1. Убедитесь, что служба Windows Management Instrumentation (Winmgmt) запущена:
Get-Service Winmgmt | Select DisplayName, Status, ServiceName
Или через консоль служб:
services.msc
Если служба остановлена, запустите ее:
net start Winmgmt
Тестирование WMI-запросов
1. Выполните простой WMI-запрос через командную строку:
wmic product get name, version
2. Или через PowerShell:
Get-WmiObject Win32_OperatingSystem
Если запросы возвращают ошибки, вероятно, поврежден репозиторий WMI или некорректно работают классы.
Проверка журналов событий
1. Включите логирование WMI:
wevtutil set-log Microsoft-Windows-WMI-Activity/Operational /enabled:true
2. Откройте Просмотр событий:
eventvwr.msc
3. Перейдите в:
Журналы приложений и служб -> Microsoft -> Windows -> WMI-Activity -> Operational
4. Ищите события с EventID 5858, где указаны проблемные пространство имен (namespace) и классы WMI. Если ошибка связана с системным классом (например, root\cimv2:Win32_OperatingSystem), репозиторий WMI поврежден.
Проверка через WMI Control
1. Откройте Управление компьютером:
compmgmt.msc
2. Перейдите в Службы и приложения -> WMI Control.
3. Если отображается ошибка, например:
Failed to initialize all required WMI classes
Win32_Processor: WMI: Invalid namespace
Win32_WMISetting: WMI: Invalid namespace
Win32_OperatingSystem: WMI: Invalid namespace
Это подтверждает повреждение репозитория.
Исправление WMI: «Мягкое» восстановление
Проверка целостности репозитория
1. Проверьте состояние репозитория WMI:
winmgmt /verifyrepository
Если выводится WMI repository is INCONSISTENT или WMI repository verification failed, репозиторий поврежден.
2. Попробуйте восстановить репозиторий:
winmgmt /salvagerepository
Эта команда проверяет согласованность и перестраивает репозиторий, сохраняя данные.
3. Перезапустите службу Winmgmt:
net stop Winmgmt
net start Winmgmt
Перерегистрация библиотек и перекомпиляция MOF-файлов
Если восстановление не помогло, выполните «мягкий» сброс WMI:
1. Сохраните следующий скрипт в файл wmi_soft_repair.bat и запустите его с правами администратора:
sc config winmgmt start= disabled
net stop winmgmt
cd %windir%\system32\wbem
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 ^| findstr /V /I "uninstall.mof"') do mofcomp %%s
for /f %%s in ('dir /b *.mfl ^| findstr /V /I "uninstall.mfl"') do mofcomp %%s
2. Для 64-битных систем повторите действия для каталога %windir%\SysWOW64\wbem, заменив третью строку:
cd %windir%\SysWOW64\wbem
3. Перезагрузите компьютер и проверьте WMI запросом:
Get-WmiObject Win32_OperatingSystem
Сброс и пересоздание WMI-репозитория
Если «мягкое» восстановление не помогло, выполните «жесткий» сброс репозитория WMI.
Автоматический сброс
1. Выполните команду:
winmgmt /resetrepository
Это сбросит репозиторий к состоянию чистой установки Windows.
Предупреждение: Сброс может нарушить работу стороннего ПО, использующего WMI. В таких случаях потребуется переустановка программ.
Ручной сброс репозитория
Если автоматический сброс не сработал, используйте следующий скрипт (wmi_hard_reset.bat), запустив его с правами администратора:
net stop winmgmt
cd %windir%\system32\wbem
winmgmt /resetrepository
winmgmt /resyncperf
if exist Repos_bakup rd Repos_bakup /s /q
rename Repository Repos_bakup
regsvr32 /s %systemroot%\system32\scecli.dll
regsvr32 /s %systemroot%\system32\userenv.dll
for /f %%s in ('dir /b *.dll') do regsvr32 /s %%s
for /f %%s in ('dir /b *.mof ^| findstr /V /I "uninstall.mof"') do mofcomp %%s
for /f %%s in ('dir /b *.mfl ^| findstr /V /I "uninstall.mfl"') do mofcomp %%s
sc config winmgmt start= auto
net start winmgmt
wmiprvse /regserver
Для 64-битных систем повторите действия для %windir%\SysWOW64\wbem.
Скрипт создает резервную копию репозитория (Repos_bakup) и пересоздает его. После выполнения перезагрузите компьютер.
Проверка результата
1. Проверьте состояние репозитория:
winmgmt /verifyrepository
Должно отобразиться:
WMI repository is consistent
2. Выполните тестовый WMI-запрос:
wmic product get name, version
или
Get-WmiObject Win32_OperatingSystem
3. Проверьте журнал WMI-Activity в Просмотре событий на наличие ошибок.
Дополнительные рекомендации
Диагностика устаревшими инструментами:
— Утилита WMIDiag.vbs (версия 2.2) подходит только для Windows 8.1 и Server 2012 R2 и ранее. Найти ее можно в интернете, но для новых систем она не рекомендуется.
Проблемы со сторонним ПО:
— Если сброс WMI нарушил работу программ, переустановите их, так как их WMI-классы могли быть удалены.
Журналы событий:
— Анализируйте ошибки в Event Viewer (WMI-Activity) для выявления проблемных классов или пространства имен.
Профилактика:
— Регулярно проверяйте целостность системы с помощью:
sfc /scannow
— Обновляйте Windows для предотвращения ошибок WMI.
Эти методы позволяют диагностировать и устранить большинство проблем с WMI, восстановив функциональность службы и репозитория в Windows.