Любой администратор Windows сталкивался с проблемами в работе службы WMI (Windows Management Instrumentation) и ее компонентах. WMI это одна из ключевых подсистем Windows, и если она неисправна, на компьютере могут наблюдаться проблемы с работой служб, получением системной информации от WMI провайдеров, выполнением скриптов и ошибки в работе сторонних приложений. В этой статье мы рассмотрим, как выполнить диагностику работоспособности WMI и исправить типовые проблемы, если WMI репозиторий поврежден.
О наличии проблем с WMI может свидетельствовать широкий спектр ошибок:
- Ошибки обработки WMI запросов в системных журналах и логах приложений:
0x80041002 - WBEM_E_NOT_FOUND
,WMI: Not Found
,0x80041010 WBEM_E_INVALID_CLASS
,Failed to initialize WMI classes
,Invalid class
илиInvalid namespace
- Ошибки обработки GPO, связанные c WMI ( некорректная работа wmi фильтров групповых политик, и пр.);
- Медленное выполнение WMI запросов;
- Ошибки при установке или работе агентов SCCM/SCOM;
- Ошибки скриптов (vbs или PowerShell), обращающихся к пространству имен WMI (скрипты с Get-WmiObject, Get-CimInstance и т.д.).
Диагностика проблем с WMI
В первую очередь проверьте, что запущена служба Windows Management Instrumentation (Winmgmt). Вы можете проверить состояние службы в консоли
services.msc
или с помощью PowerShell:
Get-Service Winmgmt | Select DisplayName,Status,ServiceName
Если служба Winmgmt запущена, протестируйте работоспособность WMI, выполнив простой WMI-запроса. Вы можете выполнить wmi запрос из командной строки или из PowerShell. Например, следующая команда выведет список установленных в Windows программ:
wmic product get name,version
Простая PowerShell команда для получения информации о версии и билда Windows через WMI:
get-wmiobject Win32_OperatingSystem
Как вы видите, служба WMI ответила на запрос корректно. Если при выполнении такого WMI-запроса Windows возвращает ошибку, скорее всего сервис WMI работает некорректно, поврежден WMI репозиторий или есть какие-то другие проблемы с WMI классами.
Включите логирование обращений к WMI в Event Viewer, выполнив команду:
wevtutil set-log Microsoft-Windows-WMI-Activity/Operational /enabled:true
Затем откройте консоль Event Viewer (
eventvwr.msc
) и перейдите в Applications and Service Logs -> Microsoft -> Windows -> WMI Activity. В описании событий ошибок в EventID 5858 будет указаны пространство имен WMI и класс, при обращении к которому происходит ошибка. Если это специальный WMI класс некой программы, возможно программа установлена некорректно, или ее файлы повреждены.
В нашем случае ошибка связана с общесистемным WMI классом root\cimv2 : Win32_OperatingSystem, что означает что база данных WMI повреждена.
A Windows Management Instrumentation (WMI) query has failed. The WMI repository may be corrupted or it works incorrectly.
Откройте консоль свойств 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
На данный момент Microsoft даже удалила ссылку на загрузку WMIDiag из центра загрузок. Но при желании, этот скрипт можно найти в сети. WMIDiag дает подробную информацию по исправлению частных ошибок в WMI, но в большинстве случаев процесс это довольно трудоемкий и стоит потраченного времени только при решении инцидентов в критичных системах (на продуктивных серверах).
Для массового сегмента рабочих станций пользователей обычно проще и быстрее сбросить и пересоздать WMI репозиторий в Windows.
Исправление WMI репозитория, перерегистрация библиотек, перекомпиляция MOF файлов
Проверьте целостность WMI репозитория в Windows с помощью команды:
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%\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
На 64 битной версии Windows эти действия нужно также выполнить для каталога SysWOW64. Замените третью строку на
cd %windir%\SysWOW64\wbem
Указанные команды можно выполнить путем простой вставки в окно командой строки, либо сохранить код в bat файле wmi_soft_repair.bat и запустить его с правами администратора (замените в BAT файле %s на %%s). После окончания работы скрипта, перезагрузите Windows и проверьте работу WMI.
Сброс и пересоздание WMI репозитория (хранилища)
Если вам не помогли мягкие способ восстановления WMI, рассмотренные выше, придется перейти к более “жесткому” способу восстановления работоспособности службы WMI, заключающегося в пересоздании хранилища WMI.
Например, в моем случае команда mofcomp почти для всех MOF файлов вернула ошибку:
Microsoft (R) MOF Compiler Version 10.0.26100.1 Copyright (c) Microsoft Corp. 1997-2006. All rights reserved. Parsing MOF file: xwizards.mof xwizards.mof (1): error SYNTAX 0X8004400a: Unexpected token at file scope Compiler returned error 0x8004400a
%windir%\System32\Wbem\Repository
и представляет собой базу данных, в которой содержится информация о метаданных и определениях WMI классов. В некоторых случаях WMI репозиторий может содержать статическую информацию классов. При повреждении репозитория WMI, в работе службы Windows Management Instrumentation (Winmgmt) могут наблюдаться ошибки вплоть до полной невозможности ее запустить.Если вы подозреваете, что репозиторий WMI поврежден, что его пересоздание — это последняя шаг, к которому нужно прибегнуть только тогда, когда другие операции не помогают реанимировать WMI.
Следующая команда выполнит сброс базы данных WMI к исходному состоянию (как после чистой установки Windows). Используйте эту команду для выполнения hard reset репозитория WMI, если параметре salvagerepository не исправил проблему:
Winmgmt /resetrepository
Если обе команды (
Winmgmt /salvagerepository
и
Winmgmt /resetrepository
) не восстановили консистентное состояние базы WMI, попробуйте выполнить “жесткое” пересоздание базы WMI вручную таким скриптом:
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
Данный скрипт полностью пересоздает хранилище WMI (старый репозиторий сохраняется в каталог Repos_bakup). После окончания работы скрипта нужно перезагрузить Windows. Затем протестируйте работу службы WMI простым запросом.
Проверьте состояние WMI репозитория. Если ошибки исправлены, команда
winmgmt /verifyrepository
должна вернуть:
WMI repository is consistent
В этой статье мы собрали основные способы, позволяющие продиагностировать и устранить неполадки службы и репозитория WMI.
Спасибо помогло
отличная и очень редкая информация! спасибо!
Отличная полезная статья. Сразу решил проблему.
На компьютере возникли проблемы в WMI. При каждом запуске компьютера выходит окошко: «The model does not support WMI», компьютер при этом работает как обычно. Нашла Вашу статью «Устранение неполадок в WMI» и, руководствуясь ей, сначала проверила имеется ли в системе служба Windows Management Instrumentation и включена ли она (имеется и включена), а затем, как у Вас написано, попробовала протестировать работоспособность WMI, обратившись к ней с помощью Powershell — служба выдаёт корректный ответ. Также, вычитав информацию на другом ресурсе, вводила в командную строку sfc/scannow, но никаких ошибок. Посоветуйте, пожалуйста, что я могу сделать?
Как правило в таких ситуациях должен помочь ребилд хранилища WMI. Попробуйте, в статье это подробно описано.
Спасибо, выручил.
Я сразу воспользовался же методом «Перерегистрация библиотек WMI и перекомпиляция mof файлов»
Плиз, поясните по-подробнее смысл команды
if exist Repos_bakup rd Repos_bakup /s /q и её ключей. То ли это условное указание на незнамо что или ещё что. Я в сомнениях по недомыслию. Сенькую.
Плиз, поясните по-подробнее смысл команды
if exist Repos_bakup rd Repos_bakup /s /q и её ключей. То ли это условное указание на незнамо что или ещё что. Я в сомнениях по недомыслию. Сенькую. А то на некоторых сайтах со ссылкой на ваш скрипт юзеры, его применившие, плачут на полный стопер системы и вынуждены откатываться.
ОГРОМНОЕ СПАСИБО! Ничего не помогало, наткнулся на эту статью случайно ЗАРАБОТАЛО! Поклоны бью!
C:\Windows\System32\wbem>for /f %%s in (‘dir /b *.dll’) do regsvr32 /s %%s
Непредвиденное появление: %%s.
oO
windows 2012 r2
У вас в команде неправилные одиночные кавычки. Наберите руками.
for /f %%s in (‘dir /b *.dll’) do regsvr32 /s %%s
у меня та же проблема. кавычки правильные вроде
Формат %%s используется при запуске внутри сценария (*.bat или *.cmd файла).
При использовании в консоли нужно убрать один знак ‘%’. Т.е. команда будет такая:
for /f %s in ('dir /b /s *.dll') do regsvr32 /s %s
Здравствуйте. Я ни разу не системщик, работаю вынужденно на фрилансе. Столкнулся в 8.1 Pro с признаками, которые не мог распознать, стал копать, вышел на WMI. К моменту разборок со службой точки сохранения старше 2 дней уже были затёрты. Нашёл, как заменить куст System версией из RegBack с помощью инсталляционного диска (там дата была недельной давности). Нашёл ваши рекомендации. Остановил службу, ввожу (power shell из-под админа, для меня непонятно его отличие от командной строки, командную строку запустил чуть позже) for /f %%s in (‘dir /b *.dll’) do regsvr32 /s %%s — мне отвечает: «строка:1 знак:4
+ for /f %%s in (‘dir /b *.dll’) do regsvr32 /s %%s
+ »
Отсутствует открывающий знак «(» после ключевого слова «for»…
Дописываю скобку после for — выдаёт строку >> и тишина.
Читаю комменты — «надо убрать знак «%», если не бат-файл. Но если он выдаёт ошибку со скобкой, то бат-файл не выполнится.
Там же вы пишите «Указанные команды можно выполнить путем простой вставки в окно командой строки» — и ни слова про %%.
Понятно, что продираюсь сквозь ваши советы, и конечно спасибо, но для несистемщика — очень тяжко.
Вот еще: wmiprvse /regserver командная строка молча проглотила, а на winmgmt /regserver командная строка ответила «недопустимый параметр
WMI
Использование:….»
далее идёт мануал.
Для меня это тупик, не понимаю. Стал выполнять далее, на последнюю строку for /f %s in (‘dir /b *.mfl’) do mofcomp %s ответил: Файл не найден.
Спасибо
Подскажите, пожалуйста, при установке на Windows 7 x64 пакета WebDeploy 3.6 в самом конце установки пишет об ошибке в скрипте и возвращает код ошибки 1702. Гугл сообщает, что ошибка возможно кроется в некорректной работе WMI, перекомпиляция файлов приведенным скриптом (указанная на форумах как путь решения проблемы) не помогла.
В логе установщика ошибка при вызове InstallEtwManifest.
WMIDiag пишет о наличии ошибок в ключах CLSID, связанных с InProcServer32.
winmgmt /verifyrepository возвращает, что все ОК
Заранее благодарен
Почему вы решили, что ошибка связана с WMI, возможно дело в самом установщике или службы Windows Installer.
Согласно кодов ошибок установщика MSI:
1702 — Configuring [2] cannot be completed until you restart your system
Попробуйте просто перезагрузить систему
Не совсем. Полное сообщение: «Error 1720. There is a problem with this Windows Installer package. A script required for this install to complete could not be run. Contact your support personnel or package vendor. Custom action InstallEtwManifest script error -2147221163.»
1) Попробуйте произвести установку с отключенным UAC.
2) Включите ведение подробного журнала установщика Windows m
siexec /i /l*v c:\tmp\install.log
Может в логе что-то более конкретное будет…
Не работает служба WMI Writer
Собственно из-за этой службы не имею возможность делать полный БэкАп системы через Акронис, в Акронисе сказали, обратиться в службу поддержки Майкрософт. Перерегистрация компонентов VSS (Volume Shadow Copy Service) в Windows Server не помогла. Что еще можно сделать? спасибо! 🙁
Как я понял, вы уже пытались воспользоваться инструкцией https://winitpro.ru/index.php/2017/12/26/reregister-vss-in-windows-server/
Я бы еще попробовал запустить проверку/восстановление образа Windows с помощью
Repair-WindowsImage -Online -RestoreHealth
Из практики могу сказать, что если не помогает перерегистрация VSS writer-ов, сброс WMI репозитория,единственно что теоретически сможет помочь (без переустановки системы), внимательное изучение журналов системы, приложения и последовательное исправление всех связанных ошибок. Но это все очень трудоемко и готового алгоритма я не знаю.
Спасибо, спас
При вводе 3-ей строки споткнулась на том, что не знаю, как вводится спецсимвол иена (юань) в командной строке. Подскажите, пожалуйста!
Не пойму, где вы нашли символ иены? Из спецсимволов использованы только проценты….
Код скрипт не нужно вводит — выполняйте его через копировать/вставить
Подскажите, пожалуйста, как вводятся символы в командную строку, которых нет на клавиатуре? Необходимо восстановить файл WMIServi Application.
Спец символы можно вводить с клавиатуры,, зажав клавишу alt и набрав код символа на цифровой клавиатуры. Таблица с кодами ASCII символов легко ищется в Интернете.
Например, чтобы набрать символ градуса (º), нужно зажать ALT, и ввести 0176 на цифровой (!!) клавиатуре (не цифры на основной).
Либо копи/паст из Word
Спасибо за подсказку, с символами ASCII и таблицей я разобралась. Проблема в том, что скопировать и вставить в командную строку ничего не получается; ПК — ноутбук, цифровая клавиатура есть, но в виртуальном виде, и магии в виде преобразования цифр в символы ASCII не происходит. Очень прошу, подскажите, как быть?
1) Подключила доп. клавиатуру, простые символы перекодируются, сложные (30%) — нет. Как получить сложные символы? 2) Можно ли настроить командную строку т. о., чтобы пользоваться функциями копи/вставка? Windows Vista.
Попробуйте выполнить команду: cmd /u
Это переключение в Unicode
Алина, а зачем собственно вам спец сиволы в cmd? Может вы не с того конца заходите к проблеме?
Может быть. Попробую восстановить все удалённые файлы. Большое Спасибо за помощь и за конструктивный подход в решении компьютерных задач!
Спасибо !!! Помог «мягкий» вариант. Очень толковое описание ошибки.
Приветствую, возник такой вопрос, при вводе вот этих команд:
winmgmt /kill
winmgmt /unregserver
winmgmt /regserver
пишет: недопустимый параметр, так и должно быть?
еще наткнулся вот на такой сценарий:
sc config winmgmt start= disabled
net stop winmgmt
cd %windir%\system32\wbem
winmgmt /kill
winmgmt /unregserver
winmgmt /resyncperf
wmiprvse /regserverpause
rundll32 wbemupgd, RepairWMISetup
rundll32 wbemupgd, UpgradeRepository
cd %windir%\system32\wbem
winmgmt /salvagerepository
winmgmt /resetrepository
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’) do mofcomp %%s
for /f %%s in (‘dir /b *.mfl’) do mofcomp %%s
winmgmt /regserver
sc config winmgmt start= auto
net start winmgmt
я так понял это то же самое, что и в «жестком» пересоздании базы, вот только есть другие команды и в конце последовательность другая команды winmgmt /regserver — это влияет?
Добрый день
Подскажите, на эту ошибку нужно обращать внимание:
Инструментарий управления Windows остановил WMIPRVSE.EXE, так как для квоты достигнут порог предупреждения. Квота: HandleCount, значение: 4099, максимальное значение: 4096, PID WMIPRVSE: 2320, поставщики в этом процессе: %systemroot%\system32\wbem\cimwin32.dll, %systemroot%\system32\wbem\ntevt.dll
Что-то при этом не работает?
Вы можете увеличить значение лимитов для WMI с помощью wbemtest.exe. (_https://blogs.technet.microsoft.com/askperf/2014/08/12/wmi-how-to-troubleshoot-wmi-high-handle-count/)
или из powershell:
$config = gwmi -Class “__ProviderHostQuotaConfiguration” -Namespace root
$config | select -Property * -ExcludeProperty __* | ft -AutoSize
$config.HandlesPerHost = 8192
$config.ThreadsPerHost = 512
$config.Put()
Да все при этом вроде бы все нормально работает.
Спасибо за статью.
Спасибо! Помог мягкий способ! Но столкнулся с проблемой:
«winmgmt /regserver
пишет: недопустимый параметр, так и должно быть?»
Также были проблемы с %%s и %s — внесите коррективы к описанию в самом начале, пожалуйста.
Проблема возникла на Win10 — ноутбук Acer Aspire R3-471GT после вынужденного обновления BIOS от производителя.
Сейчас все работает, кроме сенсорного ввода. Пытаюсь решить проблему дальше
чет не один из вариантов не помог :((
на команду winmgmt /verifyrepository пишет что базы согласованы, но все равно пуск не удался, даже не знаю что делать
есть варианты еще?
Добрый день! А Вы сталкивались с ошибкой: Регистрация сервера {73E709EA-5D93-4B2E-BBB0-99B7938DA9E4} DCOM не выполнена за отведенное время ожидания. 73E709EA-5D93-4B2E-BBB0-99B7938DA9E4 — это как раз Microsoft WMI Provider Subsystem Host. Система Windows Server 2012 полсе перезагрузки работает ровно 6 дней без проблем потом начинаются сыпаться эти ошибки каждые 10 минут.
Не сталкивался, поищите описание проблемы в буржунете по запросу «The server {784E29F4-5EBE-4279-9948-1E8FE941646D} did not register with DCOM within the required timeout.»
Спасибо
в статье выполнил
***
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’) do mofcomp %s
for /f %s in (‘dir /b *.mfl’) do mofcomp %s
На 64 битной версии Windows эти действия нужно также выполнить для каталога SysWOW64. Замените третью строку на
cd %windir%\SysWOW64\wbem
***
[PS] C:\work>Winmgmt /salvagerepository
База данных WMI согласована
**
сейчас не работают некоторые команды. например
**
[PS] C:\work>Get-NetAdapter
Get-NetAdapter : Недопустимый класс
строка:1 знак:1
+ Get-NetAdapter
+ ~~~~~~~~~~~~~~
+ CategoryInfo : MetadataError: (MSFT_NetAdapter:ROOT/StandardCimv2/MSFT_NetAdapter) [Get-NetAdapter], Ci
mException
+ FullyQualifiedErrorId : HRESULT 0x80041010,Get-NetAdapter
***
Спасибо мягкое восстановление помогло!
Спасибо Вам, добрый человек!
В моем случае помогла команда Winmgmt /resetrepository
Я Вам очень признателен!Всех благ!
Огромное спасибо за статью!
Помог последний способ «Сброс и пересоздание WMI репозитория (хранилища)».
После завершения проверил командой winmgmt /verifyrepository — База данных WMI согласована.
Еще раз, большое спасибо!
Огромное спасибо Автору, 3-ое суток не мог понять что делать, пока не наткнулся на эту статью!
Прога Windows Doctor для 10 имеет инструмент для исправления WMI. Ну очень просто, по сравнению со всем написанным выше.