Будь бувалий Windows-адмін не раз стикався з проблемами в роботі служби WMI і її компонентах. Наявність проблем в підсистемі WMI є вкрай важливим заходом із точки зору нормального функціонування системи, тому адміністратору доводиться вдаватися до тих чи інших трюків, що дозволяє відновити працездатність WMI. У цій статті ми опишемо досить просту методику діагностування та усунення неполадок в службі WMI.

Про наявність проблем з WMI може свідчити широкий спектр помилок:

  • Помилки обробки WMI запитів в системних журналах і логах додатків
  • Помилки GPO, зав’язані на WMI (некоректна робота wmi фільтрів політик, і ін.)
  • Помилки в роботі / неможливість установки агентів SCCM / SCOM
  • Помилки в роботі скриптів (vbs або powershell), що використовують простір імен WMI

В першу чергу потрібно перевірити чи є в системі служба Windows Management Instrumentation (Winmgmt) і включена вона.

Служба Інструментарій управління Windows (Winmgmt)

Якщо служба присутній і знаходиться в стані Started, рекомендується протестувати працездатність WMI, звернувшись до неї за допомогою простого wmi-запиту. За допомогою Powershell, наприклад, це можна зробити так:

get-wmiobject Win32_OperatingSystem

Запит до wmi через powershellЯкщо при виконанні найпростішого WMI-запиту система повертає помилку (на скріншоті наведено приклад коректної відповіді служби WMI), ймовірно має місце некоректне функціонування сервісу WMI або ряду його підсистем, пошкодження сховища WMI або інші проблеми.

утиліта WMIDiag

Для «тонкої» діагностики служби WMI існує офіційна утиліта Microsoft – WMIDiag (Microsoft WMI Diagnosis). Утиліта представляє собою vbs скрипт, який перевіряє різні підсистеми WMI і записує зібрану інформацію в лог файли (за замовчуванням логи знаходяться в каталозі% TEMP% – C: USERS % USERNAME% APPDATA LOCAL TEMP ). Одержаний звіт складається з файлів, імена яких починаються з WMIDIAG-V2.1 і включає в себе наступні типи фалів:

  • .log файли містять детальний звіт про активність і роботі утиліти WMIDiag
  • .txt файли містять підсумкові звіти про знайдені помилки, на які варто звернути увагу
  • У .csv файлах міститься інформація, необхідна для довгострокового аналізу роботи підсистеми WMI

Порада. У 64 бітових версіях Windows wmidiag потрібно запускати так:

c:windowsSystem32cscript.exe wmidiag.vbs

в іншому випадку з’явиться помилка: WMIDiag потрібно запускати з власного 64-розрядного середовища. Це не підтримується в Wow64. WMIDiag Він не підтримується у Wow64

Після закінчення роботи утиліти WMIDiag адміністратор повинен вивчити отримані файли логів, проаналізувати і спробувати виправити знайдені помилки.

У загальному випадку, WMIDiag може дати інформацію щодо виправлення приватних помилок в WMI, але в більшості випадків процес це досить трудомісткий і коштує витраченого часу тільки при вирішенні інцидентів в критичних системах (як правило, на продуктивних серверах). Для масового сегмента робочих станцій користувачів набагато простіше «бити по площах» і вирішувати проблему роботи WMI більш радикально.

Перереєстрація бібліотек WMI і перекомпіляція mof файлів

Наступний скрипт являє собою «м’який» варіант відновлення працездатності служби 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

winmgmt /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

Зазначені команди можна виконати шляхом простої вставки в вікно командного рядка, або зберегти код в bat файлі і запустити його з правами адміністратора. Після закінчення роботи скрипта, систему потрібно перезавантажити і знову перевірити роботу WMI.

Перестворення сховища (сховища) WMI

У тому випадку, якщо попередній спосіб не допоміг, доведеться перейти до більш «жорсткого» способу відновлення працездатності служби WMI, що полягає в пересоздании сховища.

WMI репозиторій (сховище) знаходиться в каталозі % windir% System32 Wbem Repository і являє собою базу даних, в якій міститься інформація про метаданих і визначеннях WMI класів. У деяких випадках сховища WMI може містити статичну інформацію класів. При пошкодженні сховища WMI, в роботі служби Windows Management Instrumentation (Winmgmt) можуть спостерігатися помилки аж до повної неможливості її запустити.

У тому випадку, якщо ви підозрюєте, що репозиторій WMI пошкоджений, майте на увазі, що його пересозданіе це остання річ, до якої потрібно вдатися тільки в тому випадку, якщо ніякі інші операції реанімувати WMI не допомагають.

Порада. На практиці бувають випадки, коли пересозданіе сховища WMI призводить до проблем зі стороннім софтом. Викликаний цей ефект тим, що всі записи в базі WMI обнуляються (до стану чистої системи). Таке ПО, ймовірно, доведеться встановлювати заново в режимі відновлення.

У Windows Vista і вище перевірити цілісність репозиторію WMI можна за допомогою команди:

winmgmt /verifyrepository

Якщо команда повертає, що база даних WMI знаходиться в неконсістентном стані (INCONSISTENT), варто спробувати виконати «м’яке» відновлення сховища:

Winmgmt /salvagerepository

І перезапустити службу wmi:

net stop Winmgmt
net start Winmgmt

winmgmt-verifyrepository - перевірка стану сховища wmi

Якщо описана вище команда не допомогла, виконуємо скидання сховища на початковий стан (hard reset) так:

Winmgmt /resetrepository

У тому випадку, якщо команди Winmgmt / salvagerepository і Winmgmt / resetrepository бажаного ефекту не дали, варто спробувати виконати «жорстке» пересозданіе бази WMI вручну таким сценарієм:

sc config winmgmt start= disabled

net stop winmgmt

cd %windir%system32wbem

winmgmt /kill

winmgmt /unregserver

winmgmt /regserver

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

Даний скрипт повністю перестворює сховище WMI (старий сховища зберігається в каталозі Repos_bakup). Після закінчення роботи скрипта комп’ютер потрібно перезавантажити, після чого протестувати роботу служби WMI простим запитом.

У цій статті ми зібрали типові методики дозволяють усунути неполадки в роботі служби WMI і її підсистемах.

Leave a Reply

Your email address will not be published. Required fields are marked *