Автоматическая установка 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, делаем это из командной строки или вставляем содержимое следующей команды в батник:
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 и монтирует его в созданную директорию MOUNT. Index: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:\