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

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

  • Дистрибутив 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, делаем это из командной строки или вставляем содержимое следующей команды в батник:integrate.cmd

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:%~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

где,

%~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 — путь и имя будущего образа.

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

Мой вариант:

@echo off
SET source=G:\Deploy\DVD

SET target=G:\Deploy\ISO

SET version=64

IF EXIST "%Programfiles%\Windows AIK\Tools\Servicing\pkgmgr.exe" SET WAIK=%Programfiles%\Windows AIK
IF NOT EXIST  "%Programfiles%\Windows AIK\Tools\Servicing\pkgmgr.exe" GOTO :NOWAIK

:CreateISO

IF %version%==32 SET bootloader=%WAIK%\Tools\PETools\x86\boot\etfsboot.com
IF %version%==64 SET bootloader=%WAIK%\Tools\PETools\amd64\boot\etfsboot.com
"%WAIK%"\Tools\%PROCESSOR_ARCHITECTURE%\oscdimg.exe -n -m -b"%bootloader%" "%source%" "%target%\windows%version%.iso"
GOTO :Finish

:NOWAIK
SET WAIK=
ECHO WAIK ­not found
ECHO Set a new source to folder with WAIK.
ECHO For Example E:\Software\Windows AIK
SET /P WAIK= Source to WAIK:
CALL :CreateISO
:Finish
ECHO.
ECHO Creating ISO- is complete!
pause
exit

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

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

list disk

Из приведенного списка выберем наш usb-драйв, например:

select disk 2

С помощью следующей команды, удаляем все разделы и тома на диске путем обнуления секторов.

clean

Затем создадим основной раздел на диске.

create partition primary

Выберем созданный раздел командой:

select partition 1

Форматируем раздел с указанием файловой системы:

format fs=ntfs quick

Делаем раздел активным, т.е. загрузочным.

active

Выходим командой exit.

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

xcopy /s G:\Deploy\DVD\*.* H:\

Оставить ответ

Войти с помощью: 

Вы можете использовать эти HTML тэги

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

  

  

  

*