Как стать автором
Обновить

Устранение проблем с развертыванием приложений через SCCM из-за разрушения базы WMI

Часто приходится выяснять причины, почему не разворачивается то или иное приложение через SCCM, хотя ПК находится в соответствующей коллекции и прошло достаточное количество времени.

Принудительное же развертывание (Application Deployment Evaluation Cycle) и обновление групповых политик на ПК (Machine Policy Retrieval and Evaluation Cycle) через консоль SCCM ни к чему не приводят:

Разберем на примере установки новой версии клиента 1С. Видим, что развертывание должно было произойти, но при этом на ПК данной версии 1С (8.3.18.1289) еще нет:

Скорее всего, проблема связана с разрушением базы WMI на ПК и необходимостью переустановить полностью клиент SCCM. Проверить это можно из вкладки Мониторинг / Состояние клиентов консоли SCCM:

Если данный ПК присутствует в списке, то необходимо перейти на вкладку Активы и соответствие / Устройства консоли и найти через поиск данный ПК. Ошибка также будет видна на вкладке Данные о проверке клиента данного ПК.

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

и переходим  в папку C:\Windows\System32\wbem\Repository:

Также правой кнопкой из консоли SCCM открываем Управление компьютером (Manage Computer) данного ПК и переходим к вкладке Службы:

Прежде всего, нам надо остановить, если запущены, службы ccmsetup и Configuration Manager Remote Control (cmrcservice), на некоторых ПК может называться по-русски - Удаленное управление Configuration Manager:

После этого останавливаем службу Инструментарий управления Windows (Winmgmt) и все зависящие от неё службы, как правило это Вспомогательная служба IP (iphlpsvc) и служба агента SCCM – SMS Agent Host (ccmexec), но могут присутствовать и другие службы, например Центр обеспечения безопасности (wscsvc) и / или службы производителя, например Intel(R) Rapid Storage Technology (IAStorDataMgrSvc) либо другие – надо остановить все зависимые и Winmgmt:

После остановки необходимо быстро удалить все содержимое из папки C:\Windows\System32\wbem\Repository  (переключившись в проводник удаленного ПК) и затем включить снова службу Инструментарий управления Windows (Winmgmt) для создания чистой базы репозитория WMI (создается автоматически при запуске службы). Также можно включить все остановленные зависимые службы, кроме агента SCCM (SMS Agent Host).

После этого запускаем из консоли SCCM командную строку на удаленном ПК:

и проверяем, что службы, связанные с SCCM (ccmsetup, ccmexec, cmrcservice) остановлены, либо отсутствуют:

Если они все в состоянии STOPPED – удаляем их:

Если какая-то из служб находится в состоянии RUNNING (работает), то перед удалением останавливаем её с помощью команды: sc stop cmrcservice (например).

Теперь можно удалить (очистить) папки, связанные с SCCM из C:\Windows (ccmsetup, ccmcache, CCM). При этом в папке C:\Windows\CCM не удалится одна системная папка – ScriptStore – это нормально.

После этого мы можем установить клиента SCCM заново из консоли:

Отследить установку можно по файлу логов (появится при запуске установки): C:\Windows\ccmsetup\ccmsetup.log:

Можно открыть его с помощью утилиты CmTrace.exe и наблюдать в реальном режиме времени процесс установки клиента:

Дожидаемся окончания установки клиента - 5-10 минут (появления кода возврата 0):

Если установщик вернет код 7, то ПК необходимо будет перезагрузить для продолжения установки.

По окончании установки, начнется распространение и установка приложений, назначенных и ещё не установленных на ПК, которое можно отследить по появляющимся папкам в кэше по пути C:\Windows\ccmcache в проводнике удаленного ПК. Нас интересует папка с установщиком 1С. Находим её и запоминаем имя. В этой папке будет файл log.log, показывающий процесс установки, который мы также можем просмотреть через CmTrace.exe:

Видим, что процесс установки завершился ошибкой (не нулевой код):

Это значит, что скорее всего запущен еще какой-то процесс msiexec (другая установка, обновление, например). Можно перегрузить ПК либо удалить данный процесс из командной строки с помощью команды taskkill /PID XXXXX /F, где XXXXX номер процесса:

Далее, запускаем установку 1С вручную из папки кэша (в данном случае – C:\Windows\ccmcache\3):

И проверяем, что нужная нам версия установилась по появлению соответствующей папки в C:\Program Files\1cv8 :

На этом процесс восстановления работоспособности клиента SCCM можно считать завершенным.

P.S.

Как правило, WMI разрушается на ПК с Windows 10, на Windows 7 такой ошибки не наблюдается. Причины могут быть самыми разными. Возможность автоматизировать данный процесс, например с помощью скриптов PowerShell есть, но с оговорками:

- удаление служб с ожиданием их остановки (Remove-Service) доступно только начиная с версии 6.0 (по умолчанию,  на Windows 10 установлена версия 5.1) – остальное делается штатными командами PS.

- чтобы развернуть новую версию PowerShell  и запустить скрипт нужно, чтобы служба WMI и клиент SCCM работали, т.е. восстановить на уже сбойных ПК не удастся, либо устанавливать PS 6.0, например, через групповые политики.

Все действия производились на версии SCCM 2010:

Дополнительно, установлено расширение консоли ConfigMgr Console Extensions от Dan Ireland для удобного доступа к дополнительным функциям по правой кнопке мыши (подходит версия 1.7.3a для SCCM 2012).

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.