Главная > IT > SCCM — Почти Modern Driver Management

SCCM — Почти Modern Driver Management

Или моя борьба с драйверами

После прочтения статьи Picking the Right Compression Algorithm for BranchCache я загорелся идеей перевести установку драйверов во время OSD на использование WIM-файлов, а заодно и навести порядок в Task Sequence. Стильно, модно, молодёжно. Компрессия, не надо ничего импортировать – практически Лас-Вегас с шахматами и прочим.
На деле также всё получилось без явных проблем.
За основу новой логики были взяты статьи:
1. Apply drivers compressed with WIM during OSD with Configuration Manager, но мне не нравится идея с вложенным TS для установки драйверов.
2. Speed Up Driver Package Downloads for ConfigMgr OSD.
В итоге получилось что-то среднее.

Для теста был взят Lenovo ThinkCentre M710, для которого был загружен и извлечен родной пакет драйверов с сайта производителя и собрал WIM-файл через DISM:

dism.exe /Capture-Image /ImageFile:"C:\temp\Lenovo drivers\Lenovo_M710_v2.wim" /CaptureDir:"C:\temp\Lenovo drivers\tc_m910-m910q-m710q-m710-m910x_w1064_1809_201911" /Name:"Lenovo M710 Drivers" /Description:"Lenovo M710 Series Drivers" /Compress:max

После чего он был загружен на шару, а на его основе был создан Package с Source Files.
часть Task Sequence по установке драйверов была преобразована к следующему виду:
MDM_01
• Шаг Create Drivers Directory. Выполнение команды
cmd.exe /c md %_SMSTSMDataPath%\Drivers
• Раздел с установкой драйверов Lenovo содержит условие в виде WMI-запроса

SELECT * FROM Win32_BIOS WHERE Manufacturer= "LENOVO"

• Шаг Mount Lenovo M710 Drivers. Выполнение команды

dism.exe /mount-wim /wimfile:Lenovo_M710.wim /index:1 /mountdir:%_SMSTSMDataPath%\Drivers

Также указан Package, содержащий WIM-файл с драйверами
В качестве условия указан WMI-запрос:

SELECT * FROM win32_computersystem WHERE Model LIKE '10M8%'

• Раздел Apply Drivers выполняется при наличии каталога %_SMSTSMDataPath%\Drivers
• Шаг Apply Drivers Using WIM содержит команду

DISM.exe /Image:%OSDTargetSystemDrive%\ /Add-Driver /Driver:%_SMSTSMDataPath%\Drivers /Recurse /logpath:%_SMSTSMDataPath%\Drivers\dism.log

Здесь, собственно, и происходить установка драйверов в систему
• Шаг UnMount WIM содержит команду

dism.exe /unmount-wim /mountdir:%_SMSTSMDataPath%\Drivers /discard

Загрузил дрова – убери за собой
От применяемого раннее подхода отличия состоят в способе формирования пакета и количестве передаваемых файлов. При добавлении новой модели все также требуется создание отдельного шага с определением текущей модели компьютера через WMI.

В ходе тестирования заметили, что шаг Setup Windows and ConfigMgr стал длится необычно долго (около 15-20 минут). После перезагрузки был просто черный экран, затем начинался процесс установки устройств. Пришлось заглядывать в c:\windows\panther\setupact.log где увидел проблему, описанную в статье Black Screen During Windows 10 Setup. Замена драйвера Intel Corporation — SCSIAdapter на последний для Windows 10 1809 (17.8.1.1066) и пересоздание WIM-файла решило проблему и сократило длительность шага на 8 минут.

И вроде бы всё нормально, но необходимость добавления отдельного шага для модели меня не очень радовала. Я всё больше смотрел на решение Modern Driver Management через AdminService, но оно мне подходило не в полном объеме:
• Я не использую их Driver Automation Tool по некоторым причинам ни для драйверов, ни для обновления BIOS
• Пока не планирую использовать аналогичный механизм в InPlace Upgrade тасках
Существуют аналогичные сценарии по управлению драйверами в процессе OSD, например:
Modern driver management in Configuration Manager Current Branch
Modern Driver Management with the Administration Service
Мне они опять же не зашли и пришлось делать что-то среднее и своё.

В итоге получился скрипт по управлению драйверами
Для поиска нужного пакета драйверов (не Driver Package, а package, содержащий WIM-файл с драйверами) скрипт использует информацию из полей Manufacturer и Comment.
MDM_02
Поле Comment должно содержать информацию о версии и редакции операционной системы, а также SKU оборудования в формате Ключ=Значение.
Количество вендоров железа у меня не сильно разнообразно, HP с Lenovo покрывают 90% парка.
Скрипт работает в двух режимах:
• Debug во время которого его можно запускать для проверки корректности определения необходимого Package для текущей модели компьютера

modern_driver_management_v2.ps1 -Debug -Endpoint "SRV.domain.local" -UserName "user" -UserPassword "StrongUserPassword" -BypassCertCheck $true -LogPath "C:\Temp" -OSBuild 1709

• BareMetal, который используется во время OSD

modern_driver_management_v2.ps1 -BareMetal -Endpoint "SRV.domain.local" -BypassCertCheck $true -OSBuild 1809

Для доступа к AdminService во время OSD скрипт использует пользователя и пароль, прописанные в переменных UserName и UserPassword в Task Sequence
MDM_03
Пока работает в пилотном режиме на нескольких моделях и успешно справляются с задачей

Еще полезные ссылки:

  1. The Microsoft Endpoint Configuration Manager Administration Service Guide
  2. Driver Pack Mapping and Pre-Cache
Метки: , ,
  1. Комментариев нет.
  1. No trackbacks yet.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s

%d такие блоггеры, как: