Заметки сисадмина
Назад

Автоматическая установка Windows 7 / 2008 R2 при помощи Windows AIK

Опубликовано: 17.04.2012
Время на чтение: 56 мин
0
1306


Для работы нам понадобится:

  • Дистрибутив Windows, мне ближе серверный вариант, и поэтому далее речь пойдет о 2008R2.
  • Пакет автоматической установки Windows® (AIK)
  • Обновления операционной системы, изначально в формате *.msu и драйверы, если нужна поддержка какого-то специфического железа, отсутствующего в дистрибутиве.
  • Приложения, которые мы хотим устанавливать.

Итак, для примера,  создадим один файл ответов unattended.xml для автоустановки самой Windows и один файл ответов integrate.xml нам понадобится для интеграции обновлений. Произведем импорт нужных параметров реестра. На примере 7-zip рассмотрим автоустановку приложений. Соберем это всё в кучу и создадим образ!

Первое, что необходимо сделать это создать правильную структуру папок, у меня получилась следующая картинка, где,

Distribution - Дистрибутивный общий ресурс
DVD - Содержимое установочного диска Windows 7 / 2008 R2
ISO - Здесь будут создаваться iso-образы
Logs - Здесь будем хранить логи, которые будем в последствии изучать, на предмет возможных багов во время интеграции обновлений.
Mount - Сюда будет монтироваться содержимое образов в формате *.wim
Sandbox - Песочница, временная папка необходимая для правильной работы WAIK
Updates - Закидываем сюда обновления виндов
xml - Здесь будем хранить наши xml-файлы
HKLM.reg - Твики реестра, раздела HKEY_LOCAL_MACHINE отвечающие за настройки относящиеся к данному компьютеру (для всех пользователей) (экспортируются на работающей системе)
HKU.reg - Твики реестра, раздела HKEY_CURRENT_USER, отвечающие за настройки текущего активного пользователя вошедшего в систему.(экспортируются на работающей системе)
iso_write.cmd - Командный файл для создания ISO-образа будущей системы.
Integrate.cmd - Командный файл запускающий процесс интеграции обновлений.

1) Автоматизация процесса установки Windows с помощью файла сценария unattended.xml

Запускаем Диспетчер образов системы (Windows System Image Manager), нажимаем File - Select Windows Image, переходим в директорию DVD, куда мы предварительно скопировали содержимое нашего установочного диска/образа, далее sources\install.wim, выбираем одну из редакций:

Либо сразу открываем файл каталога в формате *.clg расположенный в этой же директории. Процесс создания файла каталога, может занять продолжительное время. После открытия файла каталога, панель Windows Image выглядит следующим образом:

Далее создадим файл ответов который нам понадобится для редактирования различных компонентов автоматизирующих процесс установки:  File - New Answer File, после чего панель Файл ответов (Answer File), примет следующий вид:

Фаил ответов

Все компоненты разбиты на семь частей (проходов). Коротко о каждом из них: :)

1 windowsPE  - это среда предустановки Windows, использующаяся для подготовки к установке операционной системы. Здесь задаются языковые настройки, параметры дисплея, управление жесткими дисками, задается ключ продукта.

2 offlineServicing - Этот проход, используется для применения параметров автоматической установки к автономному образу Windows. Во время этого этапа настройки можно добавить к автономному образу пакеты поддержки языков, пакеты обновлений или другие пакеты.

3 generalize - этап "обобщения",  используется для создания эталонного образа Windows, который впоследствии можно применять для развертывания в организации. Выполняется при помощи команды sysprep /generalize

4 specialize - Во время этапа специализации установки Windows, применяются сведения образа, относящиеся к компьютеру. Например, можно настроить параметры сети, региональных стандартов, сведения о домене и многие другие параметры.

5 auditSystem - В режиме аудита этап настройки auditSystem обрабатывает параметры автоматической установки в контексте системы. Этап  запускается сразу после этапа auditUser, который используется для применения параметров в контексте пользователя.

6 auditUser - В режиме аудита этап настройки auditUser обрабатывает параметры автоматической установки в контексте пользователя. Этап auditUser запускается после этапа auditSystem, который используется для применения параметров в контексте системы.

7 oobeSystem - Во время прохода oobeSystem настраиваются параметры, которые применяются во время первого запуска системы пользователями, называемого также экраном приветствия. Параметры oobeSystem settings обрабатываются перед первым входом пользователя в систему.

Добавление параметров-компонентов к файлу ответов: Сначала выбираем нужный параметр, затем правой кнопкой выбираем нужный этап установки. Многие параметры могут выполняться на разных этапах, а какие то только на одном. Например, параметр Microsoft-Windows-International-Core-WinPE отвечающий за языковые параметры программы установки  применим исключительно к проходу windowsPE. Щелкаемся правой кнопкой и выбираем Add Setting to Pass 1 windowsPE.

После чего данный параметр со всей своей вложенной структурой отобразится в файле ответов панели Answer File, где мы можем задать ему нужные свойства. В данном случае можно указать раскладку клавиатуры InputLocale, язык программ не поддерживающих Юникод SystemLocale, для русской Windows указываем ru-RU, для английской en-US, UILanguage - язык интерфейса операционной системы, UserLocale - пользовательские параметры отображения чисел, денежных единиц, дат и времени.

SetupUILanguage - задает язык программы установки.

В свою очередь параметр Microsoft-Windows-International-Core отвечает за язык уже установленной системы и может выполняться либо на этапе specialize либо oobeSystem.

Здесь например Microsoft-Windows-Setup_neutral\UserData можно указать принятие лицензионного соглашения, полное имя  и название организации.

Аналогично указываем, для других компонентов. Для Windows 7 к примеру можно отключить UAC (User Account Controls ), если выставить EnableLUA = False, компонента Microsoft-Windows-LUA-Settings, который выполняется на этапе offlineServicing.

Далее конкретно по серверу, здесь Microsoft-Windows-ServerManager-SvrMgrNc, с помощью значения DoNotOpenServerManagerAtLogon = true, указываем программе установке не открывать диспетчер серверных ролей при первом входе пользователя в систему.

Параметр Microsoft-Windows-IE-ESC позволяет отключить ненавистный Internet Explorer Enhanced Security Configuration (ESC), на выбор для админа (IEHardenAdmin) или пользователя (IEHardenUser).

Microsoft-Windows-IE-InternetExplorer позволяет настроить множество параметров работы браузера.

Microsoft-Windows-Shell-Setup - здесь множество параметров отвечающих за имя компьютера, код продукта и. т. д. Вообще, значение большинства параметров интуитивно поняты, а если что-то вызывает затруднение, то обращаемся к встроенной справке. Итак, забиваем свои значения, экспериментируем, проверяем на наличие ошибок (Tools\Validate Answer Files) и если все ок, сохраняем файлик под именем AUTOUNATTEND.xml. Закидываем его в корень нашего будущего диска, либо в директорию sources.

2) Интеграция обновлений в развернутый образ с помощью файла сценария integrate.xml

Скачиваем нужные обновления. Свежие наборы обновлений после SP1 можно посмотреть например здесь. Обновление KB2533552 можно исключить сразу, поскольку после SP1 оно становится не актуальным и вызывает ошибки в процессе интеграции.

Переходим в папку где лежат наши обновления (*.msu):

cd /d G:\Deploy\Updates\

Внутри папки Updates временно создадим папку Temp. Далее, выполняем распаковку:

FOR %i IN (*.msu) DO START /WAIT %SystemRoot%\System32\Expand.exe %i -f:* G:\Deploy\Updates\Temp

После распаковки удаляем все файлы кроме cab, включая WSUSSCAN.cab.

Заходим в диспетчер пакетов Windows SIM и создаем дистрибутивный общий ресурс. File - Select Distribution Share и указываем программе нашу ранее созданную папку Distribution.

После чего, нажимаем Tools\Import Packages и выбираем файлы обновлений. Затем создаем новый файл ответов: File\New Answer File, и добавляем к нему наши обновления.

Сохраняем файл ответов в папке Updates под именем Integrate.xml.
Подключаем системный образ:

imagex /mountrw G:\Deploy\DVD\sources\install.wim 1 G:\Deploy\Mount

где, imagex /mountrw - подключить образ в режиме чтения/записи.
G:\Deploy\DVD\sources\install.wim 1 - путь к нашему образу, а единичка на конце означает индекс (номер редакции). Подсмотреть нужный индекс, можно с помощью команды:

imagex /info G:\Deploy\DVD\sources\install.wim

Если, вывод команды вылетает за экран, как это было у меня, то можно перенаправить в файл

imagex /info G:\Deploy\DVD\sources\install.wim >c:\1.txt

G:\Deploy\Mount - директория куда монтируется, разворачивается наш образ.

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

START /WAIT /d "%Programfiles%\Windows AIK\Tools\Servicing" pkgmgr.exe /o:G:\Deploy\Mount;G:\Deploy\Mount\Windows /n:G:\Deploy\Updates\integrate.xml /s:G:\Deploy\Sandbox /l:G:\Deploy\Logs\integrate_updates.log

После отработки команды, просматриваем \Logs\integrate_updates.log.txt на предмет возможных ошибок! Если, в конце файла видим что:

Dism.exe returned: 0 
CBS pkgmgr return code: 0x0

то все ок, интеграция прошла успешно. В противном случае, возможно надо будет исключить из интеграции какие-то проблемные обновления, пересохранив Integrate.xml. Далее, закрываем образ с сохранением изменений:

imagex /unmount /commit G:\Deploy\Mount

Здесь, возможно получить ошибку, что-то типа:

SIM Unknown error 0xc1420127

В таком случае, используем dism:

dism /unmount-wim /mountdir:G:\Deploy\Mount /discard

После чего снова заходим в Windows SIM и создаем каталог заново.

Следует отметить, что у данного метода интеграции, есть ограничения на невозможность использовать коробочные версии дистрибутивов плюс сама подготовка к интеграции, довольно таки не удобная. С появлением средства командной строки dism.exe (Windows AIK 2.0) заменяющем собой Pkgmgr.exe, PEimg и Intlcfg работать с образами стало куда приятнее. Так же упростился процесс интеграции обновлений.

3) Интеграция пакетов обновлений и драйверов при помощи средства командной строки DISM.exe

Переходим в папку G:\Deploy\. Внутри нее находится папка Updates с нашими обновлениями. Скопируем intall.wim с установочного диска / образа в папку G:\Deploy. Внутри нее создадим командный cmd-файл следующего содержания:

MD %~dp0MOUNT
Dism.exe /Mount-Wim /WimFile:%~dp0 install.wim /Index:5 /MountDir:%~dp0MOUNT
Dism.exe /image:%~dp0MOUNT /Add-Package /PackagePath:"%~dp0Updates" /LogPath:D:\dism.log
Dism.exe /Unmount-Wim /MountDir:%~dp0MOUNT /commit

где, %~dp0 - папка запуска скрипта MD %~dp0MOUNT - создает папку MOUNT внутри папки из которой запускается скрипт.

Затем скрипт подключает wim-файл находящийся в директории Update и монтирует его в созданную директорию MOUNTIndex:5 - указывает на номер редакции.  /LogPath:D:\dism.log - вывод информации о всех операциях в файл.

Следующая строка добавляет пакеты обновлений из папки Updates в подмонтированную директорию MOUNT. Обновления могут быть в *.msu или *.cab формате. MSU-шки добавляются значительно дольше. Последняя команда сохраняет изменения.

Для интеграции IE9, необходимо, сначала извлечь из установщика два файла E9-Win7.CAB (сам IE) и ielangpack-RUS.CAB (языковой пакет) и положить в директорию Updates вместе с остальными заплатками.  Остальные файлы можно удалить.

G:\Deploy\Updates\IE9-Windows7-x64-rus.exe /x:G:\Deploy\Updates\IE9

Теперь обновленный install.wim скопируем обратно в директорию с дистрибутивом либо напрямую в образ при помощи любого редактора образов. Скрипт добавляющий пакеты обновлений во все редакции будет выглядеть так:

MD %~dp0MOUNT Dism.exe /Mount-Wim /WimFile:%~dp0install.wim /Index:1 /MountDir:%~dp0MOUNT
Dism.exe /image:%~dp0MOUNT /Add-Package /PackagePath:"%~dp0Updates" /LogPath:D:\dism.log
Dism.exe /Unmount-Wim /MountDir:%~dp0MOUNT /commit
Dism.exe /Mount-Wim /WimFile:%~dp0install.wim /Index:2 /MountDir:%~dp0MOUNT
Dism.exe /image:%~dp0MOUNT /Add-Package /PackagePath:"%~dp0Updates" /LogPath:D:\dism.log
Dism.exe /Unmount-Wim /MountDir:%~dp0MOUNT /commit
Dism.exe /Mount-Wim /WimFile:%~dp0install.wim /Index:3 /MountDir:%~dp0MOUNT
Dism.exe /image:%~dp0MOUNT /Add-Package /PackagePath:"%~dp0Updates" /LogPath:D:\dism.log
Dism.exe /Unmount-Wim /MountDir:%~dp0MOUNT /commit
Dism.exe /Mount-Wim /WimFile:%~dp0install.wim /Index:4 /MountDir:%~dp0MOUNT
Dism.exe /image:%~dp0MOUNT /Add-Package /PackagePath:"%~dp0Updates" /LogPath:D:\dism.log
Dism.exe /Unmount-Wim /MountDir:%~dp0MOUNT /commit
Dism.exe /Mount-Wim /WimFile:%~dp0install.wim /Index:5 /MountDir:%~dp0MOUNT
Dism.exe /image:%~dp0MOUNT /Add-Package /PackagePath:"%~dp0Updates" /LogPath:D:\dism.log
Dism.exe /Unmount-Wim /MountDir:%~dp0MOUNT /commit

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

Для интеграции драйверов воспользуемся следующей командой:

Dism.exe /Image:%~dp0MOUNT /Add-Driver /Driver:c:\drv_x86 /Recurse

4) Импорт твиков реестра и установка приложений.

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

  • Включим службу Windows Audio (по умолчанию отключена) (HKLM)
  • Отключим Shutdown Event Tracker (Диалоговое окно при завершении работы) (HKLM)
  • Поставим классический вид панели управления (HKU)
  • Отметим 'отображать все значки и уведомления в области уведомлений' (Always show all icon and notifications on taskbar) (HKU)
  • Снимим галочку 'скрывать расширения для зарегистрированных типов файлов' (Hide extensions for known file types) (HKU)

Затем экспортируем настройки реестра в файл, у меня это HKLM.reg и HKU.reg. Пока для работы нам понадобится только HKU.reg. Импорт пользовательских параметров реестра  в дистрибутив: Снова подключим образ, если не сделали этого ранее:

imagex /mountrw G:\Deploy\DVD\sources\install.wim 1 G:\Deploy\Mount

Загрузим профиль Default User в реестр:

reg load HKEY_USERS\Custom G:\Deploy\Mount\Users\Default\NTUSER.DAT

что означает, загрузить в подраздел с произвольным именем 'Custom' раздела реестра 'HKEY_USERS', файл профиля Default User (NTUSER.DAT) расположенный в папке \Users\Default\ относительно корня подключенного образа. Откроем реестр и посмотрим что у нас получилось: Затем в этот куст, импортируем содержимое нашего HKU.reg, предварительно изменив, в нем путь с HKEY_CURRENT_USER на HKEY_USERS\Custom. reg import G:\Deploy\HKU.reg Далее выгрузим куст: reg unload HKEY_USERS\Custom Системные параметры HKLM, будем импортировать традиционным способом, из командного файла до первого входа пользователя в систему. Для этого воспользуемся привычными по WindowsXP $OEM$ директориями. К существующей структуре, добавим пару новых папок: где, Install - внутри, которого разместим наш HKLM.reg и те приложения, которые мы хотим  устанавливать в автоматическом режиме. В данном примере  установку 7-zip. $OEM$ - дистрибутивный общий ресурс. Изначально, должна располагаться в корне CD, но мне больше нравится прятать ее в sources, так тоже можно. $$ - Соответствует %WINDIR%  (например: C:\windows) Внутри папочки Scripts создаем файлик под именем SetupComplete.cmd. Содержимое этого файла может быть таким: @echo off :: Импорт твиков реестра

start /wait regedit /s %DiskRoot%\Install\HKLM.reg

Установка приложения 7-zip:

start /wait %DiskRoot%\Install\7z920-x64.msi /qn exit

Как мы видим, данному файлу для правильной работы требуется переменная %DiskRoot% указывающая на букву установочного DVD. Для  корректного определения буквы диска во время установки, сначала:  создадим в корне нашего диска пустой маркерный файл DiskRoot.txt, добавим команду, которая, будет искать наш маркерный файл и назначит переменную , которая уже будет соответствовать реальному DVD-устройству. Для этого, снова открываем диспетчер образов системы (Windows SIM). Выбираем там Insert\Synchronous Command\Pass 4 specialize

В появившемся окошке, вводим:

 

cmd /c "FOR %i IN (C D E F G H I J K L N M O P Q R S T U V W X Y Z) DO IF EXIST %i:\DiskRoot.txt SETX DiskRoot %i: -m"

Нажимаем ок, сохраняем фаил ответов. Закрываем диспетчер. Отключаем образ с сохранением изменений:

imagex /unmount /commit G:\Deploy\Mount

5) Создание загрузочного ISO-DVD.

Теперь создадим ISO-образ, для этого воспользуемся следующей командой:

Для x86:

oscdimg -n -m -b"%programfiles%\Windows AIK\Tools\PETools\x86\boot\etfsboot.com" G:\Deploy\DVD G:\Deploy\ISO\Windows32.iso

Для x64:

oscdimg -n -m -b"%programfiles%\Windows AIK\Tools\PETools\amd64\boot\etfsboot.com" G:\Deploy\DVD G:\Deploy\ISO\Windows64.iso

где, oscdimg - утилита для создания загрузочного образа -n -поддержка длинных имен файлов -m -игнорировать максимальный размер образа -b -путь к загрузочному файлу (идет сразу без пробелов) Полный список возможных ключей, смотрим здесь. %programfiles%\Windows AIK\Tools\PETools\amd64\boot\etfsboot.com - путь до загрузочного файла. G:\Deploy\DVD G:\Deploy\ISO\Windows64.iso - путь где находиться файлы образа и путь к файлу будущего образа.

6) Создание загрузочного флэш-накопителя USB

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

list disk
select disk 2
clean
create partition primary
select partition 1
format fs=ntfs quick
active
exit

Затем копируем установочные файлы и папки с дистрибутивом на флеш-носитель.

xcopy /s G:\Deploy\DVD\*.* H:\
, ,
Поделиться
Похожие записи