Восстановление WMI - ошибка 0x8007050a

Инструментарий управления Windows

Для начала можно рассмотреть варианты ошибки 0x8007050a, а именно где она появляется.

При попытке установить платформу .Net Framework, вылазиет ошибка HRESULT: 0x8007050a:

Необработанное исключение в приложении. Исключение из HRESULT: 0x8007050a NetFramework

При попытке запуска самой службы появляется ошибка 1290: 0x50a:

не удалось запустить службу Инструментарий управления Windows

При переходе на вкладку Дополнительно в свойствах сетевого адаптера, выдается ошибка WMI с сообщением:

Windows не удается вывести свойства этого подключения.
Возможно данные инструментария управления Windows (WMI) повреждены.

С свойствах любой службы при переходе на вкладку Зависимости

Зависимости службы

При запуске команды get-wmiobject Win32_OperatingSystem через Powershell:

Get-WmiObject : Исключение из HRESULT: 0x8007050a
At line:1 char:14
+ get-wmiobject <<<< Win32_OperatingSystem
       + CategoryInfo       :  InvalidOperation: <:> [Get-Winobject], COMException
+ FullyQualifiedErrorID : GetWMICOMException,Microsoft.PowerShell.Commands
.GetWmiObjectCommand

При исполнении команды wmic gfe list brief /format:table

При запуске Службы компонентов dcomcnfg.exe

SLSID {1F87137D-0E7C-44d5-8C73-4EFFB68962F2}, элемент C:\Windows\system32\wbem\wmiprvse.exe, название Microsoft WMI Provider Subsystem Secured Host имее значение AppID, но не зарегистрирован в \\HKEY_CLASSES_ROOT|AppID. Зарегистрировать его?

При выполнении некоторых скриптов

При вводе команды gpresult /z

При попытке убить процесс DCOM

При попытке запустить службу SharedAccess (ICS)

При выборе пункта Управляющий элемент WMI в оснастке Управление компьютером

В окне Свойства: Управляющий элемент WMI

Вкладка Зависимости в свойствах всех служб

 

Выполните команды:

regsvr32 /i wbemupgd.dll

regsvr32 /i userenv.dll

Приступим к лечению:

Стоит применить Первый скрипт (1):

  • Проверьте наличие файла $WinMgmt.CFG и папки FS введя команду %windir%\System32\wbem\Repository
    Если отсутствует, то скопируйте с рабочей машины и вставьте.
    Так же уточните наличие файлов в Autorecover.
  • Убедитесь, что в папке System32 отсутствуют копии файлов из папки %windir%\System32\wbem\
    Лишние копии файлов dll в System32 стоит удалить.

net stop winmgmt
PUSHD "%windir%\system32\wbem"
pause
regsvr32 /s %systemroot%\system32\mmfutil.dll
regsvr32 /s %systemroot%\system32\servdeps.dll
regsvr32 /s %systemroot%\system32\wbemupgd.dll
regsvr32 /s %systemroot%\system32\wmiaprpl.dll
regsvr32 /s %systemroot%\system32\scecli.dll
regsvr32 /s %systemroot%\system32\userenv.dll
cd "%windir%\system32\wbem"
for %%i in (*.dll) do regsvr32 -s %%i
for %%i in (*.mof) do mofcomp %%i
for %%i in (*.mfl) do mofcomp %%i
for /f %%s in ('dir /s /b *.mof *.mfl') do mofcomp %%s
mofcomp cimwin32.mof
mofcomp cimwin32.mfl
mofcomp rsop.mof
mofcomp rsop.mfl
mofcomp -n:root\cimv2\applications\exchange wbemcons.mof
mofcomp -n:root\cimv2\applications\exchange smtpcons.mof
mofcomp exmgmt.mof
mofcomp exwmi.mof
pause
mofcomp.exe /RegServer
scrcons.exe /RegServer
unsecapp.exe /RegServer
winmgmt.exe /RegServer
wmiadap.exe /RegServer
wmiapsrv.exe /RegServer
wmiprvse.exe /RegServer
IF EXIST "%windir%\SysWOW64\wbem" (
GOTO OS_64
) ELSE (
GOTO Gate1
)
:OS_64
PUSHD "%windir%\SysWOW64\wbem"
pause
regsvr32 /s %systemroot%\SysWOW64\mmfutil.dll
regsvr32 /s %systemroot%\SysWOW64\servdeps.dll
regsvr32 /s %systemroot%\SysWOW64\wbemupgd.dll
regsvr32 /s %systemroot%\SysWOW64\wmiaprpl.dll
regsvr32 /s %systemroot%\SysWOW64\scecli.dll
regsvr32 /s %systemroot%\SysWOW64\userenv.dll
PUSHD "%windir%\SysWOW64\wbem"
for %%i in (*.dll) do regsvr32 -s %%i
for %%i in (*.mof) do mofcomp %%i
for %%i in (*.mfl) do mofcomp %%i
for /f %%s in ('dir /s /b *.mof *.mfl') do mofcomp %%s
mofcomp cimwin32.mof
mofcomp cimwin32.mfl
mofcomp rsop.mof
mofcomp rsop.mfl
mofcomp -n:root\cimv2\applications\exchange wbemcons.mof
mofcomp -n:root\cimv2\applications\exchange smtpcons.mof
mofcomp exmgmt.mof
mofcomp exwmi.mof
mofcomp.exe /RegServer
scrcons.exe /RegServer
unsecapp.exe /RegServer
winmgmt.exe /RegServer
wmiadap.exe /RegServer
wmiapsrv.exe /RegServer
wmiprvse.exe /RegServer
POPD
:Gate1
ver | find "XP" > nul
IF NOT %ERRORLEVEL% == 1 (
GOTO ver_xp
) ELSE (
GOTO ver_7
)
:ver_xp
for /f %%s in ('dir /s /b *.mof *.mfl') do mofcomp %%s
GOTO End
:ver_7
"%windir%\system32\wbem\winmgmt.exe" /resetrepository
"%windir%\system32\wbem\winmgmt.exe" /restore
"%windir%\system32\wbem\winmgmt.exe" /regserver
GOTO End
:End
net start ccmexec
net start winmgmt
POPD
DEL /F /Q "%windir%\temp\fixwmi.bat"
net stop winmgmt
PUSHD "%windir%\system32\wbem"
pause
ren Repository Repository_bad
rundll32 wbemupgd, UpgradeRepository
net start winmgmt
EXIT

Теперь нужно обновить групповую политику:

батник для XP:

secedit /configure /cfg %windir%\repair\secsetup.inf /db secsetup.sdb /verbose
pause
start notepad %windir%\security\logs\scesrv.log

для Win 7,8 в командно строке от имени, бл*ть, Императора вводите по очереди:

secedit /configure /cfg %windir%\inf\defltbase.inf /db defltbase.sdb /verbose
pause


start notepad %windir%\security\logs\scesrv.log

Выполните gpresult /z - ошибок быть не должно. Если есть ошибки, то скорее всего какие-то ветки реестра имеют неверный дескриптор.

gpupdate /force
gpresult /z

pause

Папка с репозиторием должна объявиться с содержимым после запуска службы.

Для удаления мусора из реестра используйте касперскую утилиту TDSSKiller. Как уничтожать неверные дескрипторы тема отдельного материала.

Также проверьте работоспособность команды taskkill

если необходимо дополнительно:

@echo off
sc config winmgmt start= disabled
net stop winmgmt /y
%systemdrive%
cd %windir%\system32\wbem
for /f %%s in ('dir /b *.dll') do regsvr32 /s %%s
wmiprvse /regserver
winmgmt /regserver
sc config winmgmt start= Auto
net start winmgmt
dir /b *.mof *.mfl | findstr /v /i uninstall > moflist.txt & for /F %%s in (moflist.txt) do mofcomp %%s

и снова примените обновление политики.

Если не помогло, то переводим службу в режим Standalone:

  • Выполните батник следующего содержания:

в Standalone.bat (2)

sc config WSCSVC start= auto
pause
sc config SHAREDACCESS start= auto
pause
SC.EXE CONFIG WINMGMT START= AUTO
pause
RUNDLL32.EXE %SYSTEMROOT%\SYSTEM32\WBEM\WMISVC.DLL,MoveToShared
RUNDLL32.EXE C:\WINDOWS\SYSTEM32\WBEM\WMISVC.DLL,MoveToAlone
pause
WINMGMT.EXE /standalonehost
pause
NET.EXE STOP WINMGMT
pause
MOVE C:\WINDOWS\SYSTEM32\WBEM\Repository\FS\*.* %TEMP%
pause
NET.EXE START WINMGMT
pause
WINMGMT.EXE /CLEARADAP
pause
WINMGMT.EXE /resetrepository
pause
WINMGMT.EXE /RESYNCPERF
pause
WINMGMT.EXE /salvagerepository
pause

Перезагрузите компьютер, проверьте состояние службы.

  • Выполните перезапуск службы:

net stop winmgmt

cd %windir%\system32\wbem

winmgmt /kill

winmgmt /unregserver

winmgmt /regserver

winmgmt /resyncperf

wmiprvse /regserverpause

Winmgmt /salvagerepository

Winmgmt /resetrepository

sc config winmgmt start= auto

net start winmgmt

Далее выполните обновление Групповой политики, как описано выше.
Перезагрузите комп.
Пробуйте запустить службу.

  • Запустите Управление компьютером-Службы и попробуйте в свойствах службы перейти на вкладку Зависимости

Введите команду regsvr32 /i userenv.dll

Если есть возврат кода, то сделайте твик и добавьте запись в реестр

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OleAut]
"DisableShield"=dword:00000001

После перезагрузки компьютера может в Зависимости выскочить ошибка:
WMI: Недопустимое пространство имен. Пространство имен 'root\cimv2' не определено в базе данных WMI.

Это уже лучше, выполните батник (2) с командами и дополнительно создайте еще один со следующим содержанием:

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 %%i in (*.dll) do regsvr32 -s %%i

for %%i in (*.mof) do mofcomp %%i

for %%i in (*.mfl) do mofcomp %%i

winmgmt /regserver

sc config winmgmt start= auto

net start winmgmt

После перезагрузки системы можно попробовать команду regsvr32 /i userenv.dll

Иногда нужно заменить этот файл, взять с резервной копии.

После этого вам нужно будет снова сделать сброс Групповой политики.

Введите команду %windir%\SYSTEM32\wmimgmt.msc и вызовите, в окне через строчку Элемент управления WMI, Свойства. Перейдите на вкладку Ведение журнала.

Можно поставить ведение журнала подробно.

WMI ведение журнала

Дальше стоит сохранить данные в архив:

WMI архивация

Мы включили службу winmgmt в режиме STANDALONE (в общий процесс svchost).
 

SvsHost winmgmt

В разделе реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost создается подраздел winmgmt и ключ.
В разделе реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\winmgmt создается значение ImagePath = %systemroot%\system32\svchost.exe -k winmgmt, вместо %systemroot%\system32\svchost.exe -k netsvcs

В разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost
в параметре netsvcs удаляется из списка winmgmt

В подразделах netsvcs и winmgmt раздела HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost, создаются два параметра:

"AuthenticationLevel"=dword:00000004
"ImpersonationLevel"=dword:00000002


Программы использованные здесь:

WMIDiag.exe
WMIDiag.vbs
Frsdiag
NetCrunch WMI Tool (WMITools) - с помощью этой программы можно узнать каких компонентов не хватает в системе и позволяет уточнить описания по ошибкам. Работает только при запущенной службе winmgmt.

Для управления службами использовалась Starter
Для ознакомления с WMI читайте так же статью

После запуска службы сделайте перенос файлов и программ для будущей переустановки Windows.
Хотите продолжить? Сделайте резервную копию реестра используя рабочую версию набора утилит Windows Repair (All In One) от Tweeking.com

Можно попробовать второй способ, который поможет вернуть ImagePath = %systemroot%\system32\svchost.exe -k netsvcs

Добавьте в раздел HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost запись winmgmt в параметр netsvcs в реестр и перезагрузите компьютер:
В параметре netsvcs список служб.

В свойствах службы должна замениться запись на C:\WINDOWS\system32\svchost.exe -k netsvcs

Попробуйте вернуть службу "на место":

выход из Standalone.bat (3)

REG.EXE Add "HKLM\SOFTWARE\Microsoft\WBEM\CIMOM" /v "Logging" /t "REG_SZ" /d "1" /f
pause
REG.EXE Add "HKLM\SYSTEM\ControlSet002\Services\winmgmt" /v "ImagePath" /t "REG_SZ" /d "%SystemRoot%\System32\svchost.exe -k netsvcs" /f
pause
REG.EXE Add "HKLM\SYSTEM\ControlSet002\Services\Wmi" /v "ImagePath" /t "REG_SZ" /d "%SystemRoot%\System32\svchost.exe -k netsvcs" /f
pause
REG.EXE Add "HKLM\SYSTEM\CurrentControlSet\Services\winmgmt" /v "ImagePath" /t "REG_SZ" /d "%SystemRoot%\System32\svchost.exe -k netsvcs" /f
pause
REG.EXE Add "HKLM\SYSTEM\CurrentControlSet\Services\Wmi" /v "ImagePath" /t "REG_SZ" /d "%SystemRoot%\System32\svchost.exe -k netsvcs" /f
pause
REG.EXE Add "HKLM\SYSTEM\CurrentControlSet\Services\winmgmt" /v "ErrorControl" /t "REG_DWORD" /d "0" /f
pause
REG.EXE Add "HKLM\SOFTWARE\Microsoft\WBEM\CIMOM" /v "Logging" /t "REG_SZ" /d "1" /f
pause
NET.EXE STOP WINMGMT
pause
SC.EXE CONFIG WINMGMT START= AUTO
RUNDLL32.EXE C:\WINDOWS\SYSTEM32\WBEM\WMISVC.DLL,MoveToShared
pause
NET.EXE START WINMGMT
pause
WINMGMT.EXE /RESYNCPERF
pause

Пространства имен.bat:

net stop winmgmt
pause
PUSHD "%windir%\system32\wbem"
for %%i in (*.dll) do regsvr32 -s %%i
cd "%windir%\system32\wbem"
for %%i in (*.mof) do mofcomp %%i
for %%i in (*.mfl) do mofcomp %%i
for /f %%s in ('dir /s /b *.mof *.mfl') do mofcomp %%s
mofcomp cimwin32.mof
mofcomp cimwin32.mfl
mofcomp rsop.mof
mofcomp rsop.mfl
mofcomp -n:root\cimv2\applications\exchange wbemcons.mof
mofcomp -n:root\cimv2\applications\exchange smtpcons.mof
mofcomp exmgmt.mof
mofcomp exwmi.mof
pause
net start winmgmt
pause

и/или команду для winXP

rundll32.exe setupapi,InstallHinfSection WBEM 132 %windir%\inf\wbemoc.inf

Перезагрузите машину и выполните Первый скрипт (1).

Просмотр логов.bat:

start %windir%\system32\wbem\logs\

Что делать если обновление Групповых политик быстро заканчивается с ошибками?

Выполните сброс с пересозданием прав NTFS на всю паку Windows
, по возможности сделайте перенос прав.

В папке C:\Windows\System32\MSDTC нужно установить пользователя Network Service для нормальной работы службы координатора транзакций.

Снова повторите сброс Групповых политик и обязательно изучите log - будет ясно чего не хватает.

Если совсем не работает служба, то снова примените режим Standalone и
Примените рекомендации из диагностических утилит WMIDiag.exe, WMIDiag.vbs,
Frsdiag (файл WMIDiag.exe кинуть в System32 )

Внимание! Все операции нужно делать последовательно и без перескоков, иначе все делать нужно заново.
Следует так же помнить,
что без winmgmt не работает Брандмауэр, Удаленный вызов процедур и Security center.

Когда служба winmgmt заработала, выполните команды в Powershell:

Get-WmiObject -List

get-wmiobject Win32_OperatingSystem

Если выдает результат, то пробуйте обновить все NetFramework и C++
а так же обновите сервер сценариев:

rundll32.exe setupapi.dll, InstallHinfSection DefaultInstall 132 %windir%\inf\wsh.inf
  • Проверьте состояние CLSID конфигуратора DCOM:
    Для этого нужно сбросить права на умолчания в dcomcnfg.exe. Затем узнайте через Просмотр событий на что ругается Dcom (скорее всего это будет ключ {8BC3F05E-D86B-11D0-A075-00C04FB68820})
    Нужно пересоздать классы регистраций этих ключей.
    Сделать это можно по принципу указанному в конце статьи

Зависимости:

  1. Права пользователей папки Windows подпапок с файлами
  2. Права пользователей Dcom и правильность регистрации компонентов
  3. Групповая политика
  4. Права пользователей веток реестра подраздела SLSID

Если служба скидывается снова в ошибку, то переведите окончательно в Standalonehost

  • Зайдите в раздел HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost и удалите подраздел и параметр
    winmgmt
  • Перейдите к параметру netsvcs, нажмите изменить и добавьте к списку служб
    winmgmt
  • Выполните скрипт
    выход из Standalone.bat (3)
  • Перезагрузите компьютер
  • Снова примените в Standalone.bat (2)

Выполните Пространства имен.bat - должна пройти перекомпиляция mof-файлов.
если сбой запуска службы, то снова применить Standalone.bat
Выполнить в командой строке %windir%\System32\gpupdate /force
Перезагрузите систему.
Проверьте состояние командами в Powershell, должно все работать.:

# вывод WMI объектов

Get-WmiObject -List

# подключение к данным ОС

get-wmiobject Win32_OperatingSystem

# вывод провайдеров и CLSID

Get-WmiObject __Provider

# вывод классов и отображение состояния

Get-WmiObject __SystemClass

 

Категория: Службы и консоли | Добавил: masterov (28.10.2017) | Автор: Андрей Мастеров E W
Просмотров: 294 | Рейтинг: 0.0/0
Другие материалы по теме:
Всего комментариев: 0
avatar