Руководство по сценарию. Устранение неполадок с подключением и доступом WMI
В этой статье описывается, как просмотреть конфигурацию инструментария управления Windows (WMI), а также как диагностировать и устранять проблемы с подключением WMI или доступом.
Ниже приведены некоторые примеры проблем с конфигурацией WMI или подключением, которые могут возникнуть. Проблемы связаны с различными продуктами и приложениями, которые используют или зависят от WMI.
Мастер создания кластера пытается подключиться к удаленному компьютеру (узлу кластера), но не получает данные.
Когда установщик ролей Active Directory пытается связаться со своим узлом, мастер настройки служб домен Active Directory завершается сбоем со следующей ошибкой:
Adprep не удалось получить данные с сервера
testbox.contoso.com
с помощью инструментария управления Windows (WMI).Локальный запрос WMI не использует
Get-WmiObject
командлет PowerShell и получает ошибку "Доступ запрещен".
Поток подключения
Существует несколько компонентов и слоев, участвующих в соединении WMI. На высоком уровне задействованы следующие компоненты:
Клиентское или управляющее приложение, инициирующее подключение или запрос WMI
Компонент объектной модели (COM) или компонент распределенной объектной модели компонента (DCOM), используемый для локального и удаленного взаимодействия между процессами (IPC)
Транспортный или сетевой слой (удаленный вызов процедуры (RPC))
Репозиторий WMI и служба WMI
Поставщик WMI
Управляемые объекты
Определение проблемы
В зависимости от того, где произошла ошибка или сбой, или компонент, возвращающий ошибку, проблемы можно классифицировать следующим образом:
- Проблемы с подключением
- Проблемы с доступом
- Коды ошибок поставщика WMI core
Проблемы с подключением
Сбой подключения WMI, который возникает перед установкой подключения к инфраструктуре WMI локально или удаленно, считается проблемой подключения.
Проблема или ошибка возвращается архитектурой COM/DCOM локально или удаленно, уровнем транспорта (RPC) или брандмауэром. Различные ошибки могут возникать при проблемах с подключением, но наиболее распространенные ошибки:
-
0x800706BA
HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE) -
0x80041015
Ошибка сети, которая предотвращает обычную операцию.
Проблемы с доступом
Проблема с доступом возникает при сбое подключения или запроса WMI из-за сбоя доступа или отсутствия разрешений для одного или нескольких компонентов WMI.
Другими словами, в инфраструктуре WMI есть несколько областей, таких как COM/DCOM, пространства имен WMI, репозиторий WMI и поставщики, а также пользователи нуждаются в соответствующих разрешениях для доступа, использования или взаимодействия с ними. Отсутствие разрешений или ограничений приводит к сбоям подключения WMI, и могут возникнуть следующие ошибки:
-
0x80070005
E_ACCESS_DENIED
Доступ отказано в безопасности DCOM -
0x80041003
WBEM_E_ACCESS_DENIED
Доступ отказано поставщиком
Коды ошибок поставщика WMI core
Даже после успешного подключения к WMI и наличия правильных разрешений запрос WMI или подключение может завершиться ошибкой из-за базовой проблемы с запросом, ошибки, возвращаемой поставщиком, недопустимым классом или недопустимым пространством имен.
Проблема может быть вызвана различными причинами, и ошибки в основном возвращаются службой WMI.
В таких случаях возвращенный код ошибки помогает понять проблему. Ниже приведены некоторые коды ошибок:
-
0x80041002 - WBEM_E_NOT_FOUND
-
0x80041004 — WBEM_E_PROVIDER_FAILURE
-
0x80041062 — WBEM_E_PRIVILEGE_NOT_HELD
-
0x8004100E - WBEM_E_INVALID_NAMESPACE
-
0x80041010 — WBEM_E_INVALID_CLASS
-
0x80041011 — WBEM_E_PROVIDER_NOT_FOUND
-
0x80041012 — WBEM_E_INVALID_PROVIDER_REGISTRATION
-
0x80041013 - WBEM_E_PROVIDER_LOAD_FAILURE
Полный список ошибок, возвращаемых инфраструктурой WMI, указан в константы ошибок WMI.
Проверка конфигурации
Если вы можете подтвердить, что проблема связана с подключением или доступом в зависимости от возвращенного сбоя или ошибки, проверьте существующую конфигурацию WMI или убедитесь, что у пользователя есть соответствующие разрешения.
- По умолчанию только члены группы администраторов могут удаленно обращаться к пространству имен WMI.
- Чтобы подключиться к удаленному компьютеру с помощью WMI, убедитесь, что для подключения включены правильные параметры DCOM и параметры безопасности пространства имен WMI.
- WMI имеет параметры олицетворения, проверки подлинности и проверки подлинности по умолчанию (NTLM или Kerberos), необходимые целевому компьютеру в удаленном подключении. Локальный компьютер может использовать разные значения по умолчанию, которые целевая система не принимает. Эти параметры можно изменить в вызове подключения.
- Подключения к WMI на локальном компьютере имеют уровень
PktPrivacy
проверки подлинности по умолчанию. - Удаленные подключения WMI влияют на управление учетными записями пользователей (UAC) и брандмауэр Windows.
Настройка безопасности DCOM для удаленного доступа к компьютеру без администратора
Параметры DCOM для WMI можно настроить с помощью служебной программы конфигурации DCOM (DCOMCnfg.exe) в панель управления.
Эта программа предоставляет параметры, позволяющие определенным пользователям подключаться к компьютеру удаленно через DCOM. С помощью этой служебной программы можно настроить безопасность для запуска, доступа и настройки службы WMI.
В следующей процедуре описывается предоставление разрешения на удаленный запуск и активацию DCOM определенным пользователям и группам.
Если компьютер A подключается удаленно к компьютеру B, эти разрешения можно задать на компьютере B, чтобы разрешить пользователю или группе, которая не входит в группу администраторов на компьютере B, чтобы выполнить вызовы запуска и активации DCOM на компьютере B.
Чтобы предоставить пользователям или группе разрешения на удаленный запуск и активацию DCOM, выполните следующие действия.
- Нажмите кнопку "Запустить">, введите DCOMCNFG и нажмите кнопку "ОК".
- В окне "Службы компонентов" разверните компьютеры служб>компонентов. Щелкните правой кнопкой мыши мой компьютер и выберите пункт "Свойства".
- В диалоговом окне "Свойства компьютера" выберите вкладку "Безопасность COM".
- В разделе "Разрешения на запуск и активацию" выберите "Изменить ограничения".
- В диалоговом окне "Разрешение на запуск и активацию" выберите "Добавить", если имя или группа не отображаются в списке имен групп или пользователей. В диалоговом окне "Выбор пользователей, компьютеров или групп" добавьте имя и группу в поле "Введите имена объектов" и нажмите кнопку "ОК".
- В диалоговом окне "Разрешение на запуск и активацию" выберите пользователя и группу в списке имен групп или пользователей. В разделе Permissions для <пользователя или группы> проверьте разрешения удаленного запуска и удаленной активации, а затем нажмите кнопку "ОК".
В следующей процедуре описывается предоставление разрешений удаленного доступа DCOM определенным пользователям и группам. Если компьютер A подключается удаленно к компьютеру B, вы можете задать эти разрешения на компьютере B, чтобы разрешить пользователю или группе, которая не входит в группу "Администраторы " на компьютере B, чтобы подключиться к компьютеру B.
Чтобы предоставить разрешения удаленного доступа DCOM, выполните следующие действия.
- Нажмите кнопку "Запустить">, введите DCOMCNFG и нажмите кнопку "ОК".
- В окне "Службы компонентов" разверните компьютеры служб>компонентов. Щелкните правой кнопкой мыши мой компьютер и выберите пункт "Свойства".
- В диалоговом окне "Свойства компьютера" выберите вкладку "Безопасность COM".
- В разделе "Разрешения доступа" выберите "Изменить ограничения".
- В диалоговом окне "Разрешение доступа" выберите АНОНИМНЫЙ ВХОД в поле "Группа" или "Имена пользователей". В разделе "Разрешения для анонимного входа" установите флажок "Разрешить разрешение удаленного доступа " и нажмите кнопку "ОК".
Примечание.
Вы также можете добавить пользователя в группу распределенных пользователей COM локально на целевом компьютере. По умолчанию эта группа имеет все разрешения на доступ к COM/DCOM на любом компьютере Windows.
Разрешить пользователям получать доступ к определенному пространству имен WMI
Вы можете разрешить или запретить пользователям доступ к определенному пространству имен WMI, задав разрешение удаленного включения в элементе управления WMI для пространства имен. Если пользователь пытается подключиться к пространству имен, к которому пользователь не может получить доступ, пользователь получит ошибку 0x80041003.
По умолчанию это разрешение включено только для администраторов. Администратор может включить удаленный доступ к определенным пространствам имен WMI для пользователя без администратора.
Следующая процедура задает разрешения удаленного включения для пользователя без администратора.
Подключитесь к удаленному компьютеру с помощью WMIMGMT.msc.
Щелкните правой кнопкой мыши элемент управления WMI и выберите пункт "Свойства".
На вкладке "Безопасность" выберите пространство имен и выберите "Безопасность".
Примечание.
Root\cimv2 — это пространство имен по умолчанию.
Найдите или добавьте соответствующую учетную запись и проверьте функцию удаленного включения и чтения в списке разрешений.
Примечание.
Чтобы убедиться, что те же разрешения наследуются вложенным папкам или вложенным пространствам имен, нажмите кнопку "Дополнительно". Затем выберите предполагаемого пользователя и убедитесь, что в разделе "Область применения" выбрано это пространство имен и подмномены.
Чтобы проверить подключение к конкретному классу в определенном пространстве имен, можно использовать средство проверки инструментария управления Windows (WBEMTEST), выполнив следующие действия.
- Откройте WBEMTEST от имени администратора и выберите "Подключиться". По умолчанию консоль подключается к локальному пространству имен WMI Root\cimv2 .
- Измените пространство имен на тот, к к который вы пытаетесь проверить подключение. Если это удаленный компьютер, введите его в формате \\<machinename>\Root\cimv2.
Если подключение выполнено успешно, главное окно WBEMTEST подключено к указанному пространству имен, отличному от по умолчанию.
По умолчанию подключение WBEMTEST использует учетные данные пользователя, вошедшего в систему. При подключении с другой учетной записью всплывают учетные данные перед попыткой подключения.
В следующем примере показана попытка подключиться к корневому пространству имен\ccm в RemoteMachine1 с использованием учетных данных User1.
Чтобы настроить подключение WMI между присоединенным к домену компьютером и рабочим компьютером, рассмотрите локального пользователя целевого компьютера.
Примечание.
Если вы используете встроенный локальный администратор целевого компьютера, этот пользователь уже имеет соответствующие права на удаленный доступ к WMI с других компьютеров и не требует дополнительной настройки.
Брандмауэр целевого компьютера должен разрешить входящее подключение WMI, для которого можно выполнить указанную выше конфигурацию брандмауэра, как показано в разделе параметров брандмауэра Windows. Затем настройте пространство имен DCOM и пространство имен WMI, как показано в разделе безопасности Set DCOM, чтобы разрешить пользователю, не являющемся администратором, удаленно получить доступ к компьютеру и разрешить пользователям доступ к определенным разделам пространства имен WMI.
Параметры брандмауэра Windows
Параметры WMI для параметров брандмауэра Windows позволяют включать только подключения WMI, а не другие приложения DCOM.
Исключение должно быть задано в брандмауэре для WMI на удаленном целевом компьютере.
Исключение для WMI позволяет WMI получать удаленные подключения. Если клиентское приложение создает собственный приемник, этот приемник должен быть явно добавлен в исключения брандмауэра, чтобы разрешить обратные вызовы успешным.
Вы можете включить или отключить трафик WMI через пользовательский интерфейс брандмауэра Windows. Для этого выполните следующие шаги.
- В панель управления выберите брандмауэр Windows для безопасности>.
- Выберите Изменить параметры, а затем перейдите на вкладку Исключения.
- В окне исключений установите флажок инструментария управления Windows (WMI), чтобы включить трафик WMI через брандмауэр. Чтобы отключить трафик WMI, снимите флажок.
Вы можете включить или отключить трафик WMI через брандмауэр в командной строке с помощью группы правил WMI.
Используйте следующую команду в командной строке, чтобы включить трафик WMI через брандмауэр.
netsh advfirewall firewall set rule group="windows management instrumentation (wmi)" new enable=yes
Используйте следующую команду, чтобы отключить трафик WMI через брандмауэр.
netsh advfirewall firewall set rule group="windows management instrumentation (wmi)" new enable=no
Вместо использования одной команды группы правил WMI можно также использовать отдельные команды для каждой службы DCOM, службы WMI и приемника.
Чтобы включить трафик WMI, используя отдельные правила для DCOM, WMI, приемника вызовов и исходящих подключений:
Чтобы установить исключение брандмауэра для порта DCOM 135, используйте следующую команду:
netsh advfirewall firewall add rule dir=in name="DCOM" program=%systemroot%\system32\svchost.exe service=rpcss action=allow protocol=TCP localport=135
Чтобы установить исключение брандмауэра для службы WMI, используйте следующую команду:
netsh advfirewall firewall add rule dir=in name ="WMI" program=%systemroot%\system32\svchost.exe service=winmgmt action = allow protocol=TCP localport=any
Чтобы установить исключение брандмауэра для приемника, получающего обратные вызовы с удаленного компьютера, используйте следующую команду:
netsh advfirewall firewall add rule dir=in name ="UnsecApp" program=%systemroot%\system32\wbem\unsecapp.exe action=allow
Чтобы установить исключение брандмауэра для исходящих подключений к удаленному компьютеру, с которым локальный компьютер взаимодействует асинхронно, используйте следующую команду:
netsh advfirewall firewall add rule dir=out name ="WMI_OUT" program=%systemroot%\system32\svchost.exe service=winmgmt action=allow protocol=TCP localport=any
Чтобы отключить трафик WMI с помощью отдельных правил для DCOM, WMI, приемников обратных вызовов и исходящих подключений:
Чтобы отключить исключение DCOM, используйте следующую команду:
netsh advfirewall firewall delete rule name="DCOM"
Чтобы отключить исключение службы WMI, используйте следующую команду:
netsh advfirewall firewall delete rule name="WMI"
Чтобы отключить исключение приемника, используйте следующую команду:
netsh advfirewall firewall delete rule name="UnsecApp"
Чтобы отключить исходящее исключение, используйте следующую команду:
netsh advfirewall firewall delete rule name="WMI_OUT"
Устранение неполадок с различными сценариями
Большинство проблем с подключением вызваны неправильными разрешениями, отсутствием разрешений или внешними факторами, такими как брандмауэры или антивирусное программное обеспечение. Поэтому проверка конфигурации может устранить проблему.
Помимо конфигурации по умолчанию некоторые дополнительные параметры могут повлиять на подключение.
Просмотрите журналы событий приложения и системы для любых ошибок, зарегистрированных клиентским приложением или из источника (Microsoft-Windows-DistributedCOM), и найдите все соответствующие ошибки или события, которые могут быть зарегистрированы на исходном или целевом компьютере в зависимости от сценария.
Просмотрите журналы событий брандмауэра Windows в разделе Просмотр событий> Applications and Services Logs>Microsoft>Windows>Firewall with Advanced Security Firewall with Advanced Security>Firewall for any connections from WMI, заблокированных брандмауэром.
Некоторые параметры групповой политики включены для изменения поведения по умолчанию и разрешений RPC и DCOM. Например:
Эта групповая политика может ограничить вызовы RPC без проверки подлинности, что может привести к ошибке:
Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)
Вызов\удаленной процедуры удаленной процедуры для\конфигурации\\компьютера ограничивает клиенты RPC, не прошедшие проверку подлинности
Этот параметр определяет, как среда выполнения сервера RPC обрабатывает неавторентированные клиенты RPC, подключающиеся к серверам RPC. Этот параметр политики влияет на все приложения RPC, включая WMI.
Эта групповая политика может настроить пользовательские разрешения DCOM:
Параметры\безопасности параметров безопасности параметров windows конфигурации\компьютера: параметры\безопасности локальных\политик\DCOM: ограничения запуска компьютера в синтаксисе языка определения дескриптора безопасности (SDDL)
Этот параметр позволяет указать ACL двумя способами. Дескриптор безопасности можно ввести в SDDL или предоставить или запретить разрешения локального доступа и удаленного доступа пользователям и группам.
Просмотрите динамический диапазон портов RPC на целевом компьютере:
netsh int ipv4 show dynamicport tcp
netsh int ipv4 show dynamicport udp
netsh int ipv6 show dynamicport tcp
netsh int ipv6 show dynamicport udp
Сравните его с рабочим компьютером. Если диапазон портов не используется по умолчанию или ограничен небольшим диапазоном, это может повлиять на подключение WMI. Общие сведения о службе и требования к сетевому порту для Windows показывают диапазон портов по умолчанию, необходимый для RPC.
Если проблема связана с доступом или основной ошибкой WMI, входящие запросы регистрируются как операционные события в журнале Microsoft-Windows-WMI-Activity/Operations в Просмотр событий> Applications and Services Logs>Microsoft>Windows>WMI-Activity.
В некоторых сценариях локальные подключения WMI могут завершиться ошибкой.
Для проверки локального подключения WMI можно использовать WMIMGMT.msc , щелкнув правой кнопкой мыши элемент управления WMI и выбрав свойства.
Ниже приведены некоторые ошибки, возникающие при сбое локального WMI:
-
Не удалось подключиться к <локальному компьютеру> , так как "WMI: Не найден"
-
Не удалось подключиться к <локальному компьютеру> , так как "Win32: система не может найти указанный путь".
-
Не удалось подключиться к <локальному компьютеру> , так как "WMI: универсальный сбой"
Эти типы ошибок иногда могут быть вызваны, если в репозитории WMI возникает сбой или в случае повреждения.
Следующую команду можно использовать в окне командной строки с повышенными привилегиями для проверки согласованности в динамическом или текущем используемом репозитории WMI.
winmgmt /verifyrepository
Вы также можете выполнить эту команду с /verifyrepository <path>
помощью . При указании аргумента пути можно проверить любую сохраненную копию репозитория.
В этом случае аргумент пути должен содержать полный путь к сохраненной копии репозитория. Сохраненный репозиторий должен быть копией всей папки репозитория.
В следующей процедуре описывается, как перекомпилировать MOF-файлы поставщика WMI и повторно зарегистрировать библиотеки DLL поставщика WMI. Сюда входят все встроенные поставщики и те, которые помещаются в путь по умолчанию. Выполните следующие команды в окне командной строки с повышенными привилегиями.
Примечание.
Ниже описано, как перезапустить службу WMI.
Остановите службу WMI и задайте для нее значение
disabled
:sc config winmgmt start= disabled net stop winmgmt /y
Перейдите в папку WBEM :
%systemdrive% cd %windir%\system32\wbem
Повторно зарегистрируйте поставщиков WMI:
for /f %s in ('dir /b *.dll') do regsvr32 /s %s
Задайте для службы WMI значение
Auto
и запустите службу:sc config winmgmt start= Auto net start winmgmt
Перекомпилируйте MOF-файлы:
dir /b *.mof *.mfl | findstr /v /i uninstall > moflist.txt & for /F %s in (moflist.txt) do mofcomp %s
Примечание.
Существует несколько внешних блогов и сайтов для сброса репозитория WMI или перестроения репозитория WMI. Это задает репозиторий WMI обратно в исходное состояние при установке операционной системы. WMI потеряет все собранные с течением времени сведения о самой системе, приложениях, службах и других сущностях вокруг нее. Поэтому мы не рекомендуем перестроить репозиторий WMI, если он не выполняется службой поддержки Майкрософт.
Поток подключения на уровне сети
Следующие трассировки — это выходные данные трассировок сети, захваченные с помощью сетевого монитора между двумя компьютерами при выполнении запроса WMI с WMIC.exe.
Это может помочь определить, является ли проблема с сетевым подключением.
Подключение к средству сопоставления конечных точек через порт 135 целевого компьютера:
65 9:07:30 AM 3/21/2017 6.2302032 svchost.exe 10.0.0.6 10.0.0.22 TCP TCP:Flags=......S., SrcPort=49229, DstPort=DCE endpoint resolution(135), PayloadLen=0, Seq=3759018265, Ack=0, Win=8192 ( Negotiating scale factor 0x8 ) = 8192 {TCP:8, IPv4:7}
Запрос интерфейса RPC UUID для IRemoteSCMActivator:
68 9:07:30 AM 3/21/2017 6.2366981 svchost.exe 10.0.0.6 10.0.0.22 MSRPC MSRPC:c/o Bind: IRemoteSCMActivator(DCOM) UUID{000001A0-0000-0000-C000-000000000046} Call=0x5 Assoc Grp=0x0 Xmit=0x16D0 Recv=0x16D0 {MSRPC:9, TCP:8, IPv4:7}
Подключение к одному из динамических портов, предоставляемых картой конечных точек целевого компьютера:
77 9:07:30 AM 3/21/2017 6.3539124 WMIC.exe 10.0.0.6 10.0.0.22 TCP TCP:Flags=......S., SrcPort=49230, DstPort=49154, PayloadLen=0, Seq=2143969401, Ack=0, Win=8192 ( Negotiating scale factor 0x8 ) = 8192 {TCP:10, IPv4:7}
Подключение к пространству имен Root\CIMV2 компьютера TargetMachine:
96 9:07:30 AM 3/21/2017 6.4702188 WMIC.exe 10.0.0.6 10.0.0.22 WMI WMI:IWbemLevel1Login:NTLMLogin Request, NetworkResource=\\TargetMachine\ROOT\CIMV2 PreferredLocale=ms_409,en-US,en Flags=0 {MSRPC:11, TCP:10, IPv4:7}
Выполнение запроса:
116 9:07:31 AM 3/21/2017 6.7577443 WMIC.exe 10.0.0.6 10.0.0.22 WMI WMI:IWbemServices:ExecQuery Request, *Encrypted* {MSRPC:11, TCP:10, IPv4:7}
Сбор данных
Перед открытием обращения в службу поддержки для дальнейшего изучения можно собирать данные, выполнив следующие действия:
Скачайте TSS.zip и извлеките содержимое.
Запустите трассировку, выполнив следующий командлет из командной строки PowerShell с повышенными привилегиями.
.\TSS.ps1 -UEX_WMIAdvanced -WMIProvList RPC,DCOM -NetshScenario netconnection -noBasicLog
Воспроизводит ошибку подключения или подождите, пока не будет воспроизведена ошибка. Продолжайте трассировку более чем за две минуты.
Остановите трассировку, следуя инструкциям в окне PowerShell, на котором выполняется средство TSS.
Скрипт создает ZIP-файл, содержащий все результаты трассировки и диагностические сведения. После создания варианта поддержки вы можете отправить этот файл в безопасную рабочую область для анализа.