OSDPreStartTool; OSD Pre Check; ZTIGather.wsf & UserExit script; Несколько предварительных проверок;

image

* 2018-08-18 Добавлена ф-я «WarnValidateNetworkConnectivity», которая ожидает когда сетевой интерфейс инициализируется. Проверяет это заданное кол-во раз, через заданный промежуток. Теперь ф-ии «SleepMSeconds» и «WarnIPNotPresent», не нужны.

* 2018-08-14 Перезалил проект на GitHub. В последнем релизе был найден досадный баг, который по сути, не позволял использовать OSDPreStartTool. За сообщение спасибо “p g”.
+ обновил файлы MDT от 8450.

Пролог

Традиционные проблемы возникающие при установке ОС из SCCM/MDT, на этапе загрузки по PXE можно определить, как:

  • Отсутствует сеть, после загрузки по PXE;
  • Отсутствует сторадж;
  • Неправильное время в CMOS.

Ну и более экзотические:

  • USB флешка или прочий внешний диск подключен как устройство №0;
  • Возможность подключаться к консоли до запуска TaskSequence.

Однако визуально определить их на этапе загрузки не всегда представляется возможным, особенно не искушённому инженеру.

Вот эти и прочие недочеты я пытался обойти. Пособирав некоторое время наиболее часто возникающие проблемы в своем окружении, я написал скрипт для их локализации и добавил дополнительные функции, постаравшись сделать этот инструмент максимально прозрачным для понимания и легким для расширения.

Решив поделиться своими наработками хотелось бы получить и фидбек. Может быть будут новые идеи, предложения, пожелания. А также указания на ошибки.

  • Как работает
  • Как включить
  • Как тестировать
  • Как добавить в boot-образ
  • Реализованные функции
  • Как выглядит
  • Эпилог

Как работает

За основу, был взят основной движок MDT — ZTIGather.wsf и одна из его возможностей — «UserExit Scripts». Большое количество примеров его использования представлены на просторах интернета.

При загрузке boot-образа, на самых ранних этапах запускается «ZTIGather.wsf» (который указан в файле «Unattend.xml»), который в свою очередь вызывает функцию «UserExit», подгружая библиотеку функций из файла «OSDPreStartTool.vbs», и вызывает указанные в файле «CustomSettings.ini» функции в указанном порядке.

Идеи и местами реализацию подсматривал в таких, уже известных решениях как: CheckForNetwork.vbs, OSD Pre-Flight Checks, и ещё куче мест, про которые и не помню уже.

При написании я руководствовался следующим подходом:

  • Каждая функция — делает только свою проверку и/или действие, если необходимо обмениваться информацией — обмениваются через переменные окружения;
  • Максимально базируется на библиотеках MDT: ZTIUtility.vbs, ZTIDataAccess.vbs, etc, без притаскивания сторонних утилит, написания уже существующих в MDT функций.

Однако для работы данного решения не требуется интеграция с MDT.

 

Как включить

Переходим на https://github.com/sekorotkov/OSD Скачиваем текущую версию (Справа-сверху Clone or download/Download ZIP), распаковываем, получаем следующую структуру папок и файлов:

\—OSDPreStartTool
|   Unattend.xml
|
\—Deploy
\—Scripts
CustomSettings.ini
OSDPreStartTool.vbs

ZTIDataAccess.vbs
ZTIGather.wsf
ZTIGather.xml
ZTIUtility.vbs

* В архиве скрипты от версии MDT-8443

* 2018-08-14: В архиве скрипты от версии MDT-8450

Внимание! В архиве используется файл Unattend.xml для 64-х битного образа boot.wim. Для 32-битного замените в нем:

processorArchitecture="amd64" на processorArchitecture="x86"

Редактируем файл CustomSettings.ini

Основное что надо поменять:

  • EventService — если используете MDT Monitoring;
  • PXETimeServers001 (002, …,00x) — сервера откуда брать время (перебираются по порядку до первой удачной синхронизации);
  • PXETimeUser — пользователь под которым авторизовываться на сервере (локальный или доменный);
  • PXETimePassword — пароль пользователя;
  • PXETimeDomain — домен пользователя, если не локальный;
  • WarnPingHosts — заменить сервера/ip, который надо пинговать, на свои.

 

Как тестировать

Включаем поддержку командной строки в boot-образе

Загружаемся с него, нажимаем F8 и в командной строке подключаем сетевой диск со скриптами

net use q: \\YouComputer\d$\scripts\OSDPreStartTool /USER:YouDOMAIN\YouUSER

Перед каждым запуском необходимо удалять результаты предыдущей работы:

rd X:\MININT /s /q & rd C:\MININT /s /q

Копируем скрипты и запускаем:

copy q:\deploy\Scripts\*.* x:\deploy\Scripts /y && cscript.exe X:\Deploy\Scripts\ZTIGather.wsf /debug:true

Смотрим в консоль или лог файл «C:\MININT\SMSOSD\OSDLOGS\ZTIGather.log» или «X:\MININT\SMSOSD\OSDLOGS\ZTIGather.log»

 

Как добавить в boot-образ

Если создаем новый MDT Boot-образ, на этапе Customization добавляем папку со скриптами:

image

Если добавляем в существующий Boot-образ, то:

  • Делаем бэкап (просто скопировав образ в отдельную папку), создаем структуру папок, копируем boot.wim, монтируем boot.wim:
md d:\sccm
md d:\sccm\mount

copy "\\cсm-server\path\to\boot\winpe.wim" d:\sccm\

cd d:\sccm\
Dism /mount-wim /wimfile:.\winpe.wim /index:1 /mountdir:.\mount

Копируем файлы, так чтобы Unattend.xml был в корне распакованно диска, в нашем примере d:\sccm\mount\Unattend.xml

Размонтируем boot.wim с сохранением изменений:

Dism /unmount-wim /mountdir:.\mount /commit

Копируем образ обратно:

copy d:\sccm\winpe.wim "\\cсm-server\path\to\boot\winpe.wim" /y

В консоли CCM обновляем образ на точке распространения — правой кнопкой на образе / Update Distribution Points

 

Реализованные функции

на текущий момент из набора я использую:

WarnValidateNetworkConnectivity — Ожидание когда сетевой интерфейс проинициализируется. Параметрами указывается сколько делать проверок и через какой промежуток.

WarnPingHosts — Пингуем заданный список хостов/ip-адресов. Работает в 2-х режимах:

  • Все адреса из списка должны пинговаться, например можем указать DC, DHCP, WDS — серверы;
  • Хотя бы один из списка должен ответить.

DateTimeSync — синхронизация времени с указанного сервера. Синхронизируется через «net time /set».

Вспомогательные переменные: PXETimeServers, PXETimeUser, PXETimeDomain, PXETimePassword, PXETimeShareName.

SetPowerScheme — Установка схемы электропитания. Зачем это может пригодиться и дальнейшие шаги, можно почитать тут: https://skorotkov.wordpress.com/2016/11/05/sccm-ts-high-performance-powerplan-os/.

WarnIsOnBattery — Предупреждать если это Устройство с батареей (ноутбук/планшет) и не включена зарядка.

WarnUSBAsDiskX — Предупреждать если указанный диск является USB устройством.

WarnStorNotPresentAsDiskX — Предупреждать если диска №X нет или InterfaceType указанного диска не IDE/SCSI.

 

Следующие параметры относятся к функционалу MDT Monitoring.

Если вы еще не пользуетесь сервисом мониторинга — то почитайте что это и зачем, например тут, а если хотите использвоать DaRT Remote  Controll — тут и тут.

SetCurrentActionName — Устанавливает заданное имя шага для вновь-загруженного клиента (п. 1).

EnableDaRT — запустить на клиенте процесс «RemoteRecovery.exe» — серверную часть пакета «DaRT Remote Control», для возможности подключения к вновь-загруженному клиенту (п. 2).

clip_image003

В OSDPreStartTool.vbs есть ещё несколько других функций, которые я не придумал как использовать или не дописал :)

 

Как выглядит

Выглядит очень просто, поскольку вывод предупреждения реализован через:

Wscript.Popup "Текст сообщения", Таймаут, "Заголовок сообщения", Кнопки+Иконка

Пара примеров, скриншотов с предупреждениями

image

image

 

Эпилог

Не забудьте отключить режим отладки (F8) в свойствах boot-образа :)

Скрипт требует правильного оформления, а главное — грамотного описания на англ.языке (за него отдельные извинения) и если найдется кто готов помочь с переводом буду признателен.

Реклама
Запись опубликована в рубрике MDT, OSD, SCCM, Troubleshooting. Добавьте в закладки постоянную ссылку.

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

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

Логотип WordPress.com

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

Google photo

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

Фотография Twitter

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

Фотография Facebook

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

Connecting to %s