Автоматическая инсталляция Windows 7

Автоматическая установка Windows 7
В корпоративной среде (да и дома зачастую) необходимо иметь образ с предустановленым набором программ. Это дает возможность свести к минимуму время для донастройки пользовательского компьютера после установки операционной системы. (При использовании System Center Configuration Manger это время можно свести практически к нулю). Но пока SCCM трогать не буду, а в данной статье будет описано процесс подготовки образа и файла ответов для автоматической установки Windows 7 с использованием Windows Deployment Sevices.
Для осуществеления задуманного понадобится:
1. Windows Deployment Server (WDS)
2. Windows Automation Installation Kit for Windows 7 (WAIK for Windows 7)
3. Установочный диск с требуемой редакцией Windows 7.
Приготовления:
1. В качестве boot образа в WDS импортируем файл boot.wim из каталога sourses, находящегося на диске с операционной системой.
2. Устанавливаем WAIK
3. Создаем собсвенный загрузочный диск, на который не забываем скопировать утилиту imagex (http://www.maxx.net.ua/?p=9)
4. Устанавливаем Windows 7 на тестовый компьютер и затем все необходимые программы.
5. Готовим файл ответов.
6. Запускаем sysprep и затем создаем образ диска с операционной системой.
Пункты с 1-4 не содержат чего-либо сложного, а описание что делать в пункте 3 можно найти по ссылке. Остановимся на пунктах 5 и 6.
Подготовка файлов ответов
Файл ответов (unattend.xml) это обычный xml файл, который можно написаь и вручную, однако гораздо удобней эо делать при помощи специальной утилиты. Для создания файла ответов предназначена утилита Windows System Image Manager (WindowsSIM).
После запуска открываем файл инсталляции (File -> SelectWindowsImage) и указываем в качестве образа операционной системы файл install.wim с диска с операционной системой.
В разделе Answer File находятся разделы файла ответов. Для его составления необходимо в окне Windows Image выбрать нужный компонент и перенести его в требуемый раздел файла ответов. После чего заполнить в окне Properties необходимые параметры. Все параметры, которые не будут заполнены в файл ответов не попадут.
Далее приведены параметры, которые необходимо вписать в файл ответов:
Раздел oobeSystem Компонент Microsoft-Windows-Shell-Setup
<OOBE>
<HideEULAPage>true</HideEULAPage>
показывать или не показывать лицензионное соглашение
<NetworkLocation>Work</NetworkLocation>
параметры сетевого подключения
<ProtectYourPC>1</ProtectYourPC>
использовать рекомендуемые параметры автоматического обновления
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
не предлагать пользователю подключаться к безпроводной сети после установки
<SkipMachineOOBE>true</SkipMachineOOBE>
как говорит документация, эта опция не используется. Однако если ее не использовать, то появляется окно с предложением ввести имя компьютера, несмотря на то, что он уже введен в домен и имеет имя. После ввода имени компьютер переименовывается, но в домене остается под старым именем
<RegisteredOrganization>My Organization</RegisteredOrganization>
название организации
<RegisteredOwner>Org User</RegisteredOwner>
Имя пользователя
Далее следует набор опций, которые добавляют доменных администраторов в группу локальных администраторов. Если этого не сделать, то появится окно с предложением создать пользователя после установки.
<DomainAccounts>
<DomainAccountList wcm:action=”add”>
<DomainAccount wcm:action=”add”>
<Group>Administrators</Group> локальная группа
<Name>Domain Admins</Name> доменная группа, которую добавляем в локальную группу
</DomainAccount>
<Domain>OrgDomain</Domain> в каком домене группу искать
</DomainAccountList>
</DomainAccounts>
<LogonCommands>
<AsynchronousCommand wcm:action=”add”>
<CommandLine>cmd /c net user user /delete</CommandLine>
<Description>delete temp user</Description>
<Order>1</Order>
<RequiresUserInput>false</RequiresUserInput>
</AsynchronousCommand>
</LogonCommands>
в моем образе существует пользователь, который абсолютно не нужен при работе, вот его здесь и удалим. Также тут можно добавить любые команды, которые нужно выполнить при первом входе в систему
<TimeZone>FLE Standard Time</TimeZone>
временная зона
Раздел oobeSystem Компонент Microsoft-Windows-International-Core
<SystemLocale>ru-ru</SystemLocale>
язык для программ, не поддерживающих Unicode.
<UserLocale>uk-ua</UserLocale>
указываем региональные настройки пользователя(формат вемени, даты и т.д.)
<InputLocale>en-us</InputLocale>
раскладка клавиатуры
<UILanguage>uk-ua</UILanguage>
язык интерфейса
<UILanguageFallback>uk-ua</UILanguageFallback>
какой язык отображать, если язык интерфейса не содержит надписей на нужном языке
Раздел specialize Компонент Microsoft-Windows-UnattendedJoin
<Credentials>
домен, имя и пароль пользователя, который будет использован для ввода компьютера в домен
<Domain>OrgDomain</Domain>
<Password>pass</Password>
<Username>user</Username>
</Credentials>
<JoinDomain> OrgDomain </JoinDomain>
домен, в который нужно ввести компьютер.
<MachineObjectOU>OU=Deployed,OU=Computers,DC=OrgDomain </MachineObjectOU>
В какой контейнер AD расположить учетную запись компьютера.
После создания файла ответов, его можно скопировать на тестовую машину например в директорию %WINDIR%\system32\sysprep и запустить команду sysprep /generalize /oobe /shutdown /unattend:unattendfilename.xml.
После выключения компьтера загружаемся с образа, созданного в пункте 3 и командой imagex /capture c: f:\sevenimage.wim “Windows 7 image” создаем образ. В дальнейшем этот образ можно распространять при помощи WDS сервера, либо на DVD диске, если его размер позволит это сделать.
Пример рабочего файла ответов можно скачать здесь
Видео как создать файл ответов можно увидеть здесь – скачать (12 Мб) либо посмотреть в онлайне

Поиск драйверов в каталоге обновлений Windows

Как-то раньше я обходился драйверами, скачанными с сайта производителя либо компьютера, либо самого железа. Но вот при собирании образов для Windows 7 нужны нормальные драйвера, а не инсталяторы, которые обычно предлагают скачать производители. И тут в поисках очередного драйвера я наткнулся на каталог обновлений от Microsoft, расположеный по адресу – http://catalog.update.microsoft.com/v7/site/home.aspx. Оказалось что в качестве критерия для поиска можно вбить даже DEV_XXXX – строку, которую можно увидеть в диспетчере устройств. И если такой драйвер есть, он будет показан. Дальше все просто – скачиваем архив и получаем именно драйвера с inf файлами, а не инсталятор.

Создание собственного загрузочного диска на базе Windows PE

С выходом Windows 7 вышел и новый WAIK. В целом работа с ним особо не отличается от работы с WAIK для Windows Vista, однако в нем наконец-то появилась поддержка русского языка. А это означает что можно беспроблемно его использовать для например сохранения данных с нерабочено ноутбука/компьютера.
Получить его можно здесь – http://www.microsoft.com/downloads/details.aspx?familyid=696DD665-9F76-4177-A811-39C26D3B3B34&displaylang=en. Хотелось бы отметить, что в отличие от предыдущей версии для скачивания данного WAIK не нужно проходить проверку подлинности Windows. Странно, но это так. Скачиваем, пишем на болванку, устанавливаем. И затем запускаем Deployment Tools Command Prompt (запустить необходимо с правами администратора).
А дальше все очень просто:
d:\Data\OsDeployImages\boot\work\image – директория для работы,правится по надобности.
copype.cmd x86 d:\Data\OsDeployImages\boot\work\image\
Директория image не должна существовать и будет создана.
В отличие от предыдущего WAIK тут практически все делается одной командой – dism
Монтируем образ:
dism /mount-wim /wimfile:d:\data\osdeployimages\boot\work\image\boot.wim /index:1 /mountdir:d:\Data\OsDeployImages\boot\work\image\mount

Добавляем поддержку русского языка:

dism /image:d:\Data\OsDeployImages\boot\work\image\mount /add-package /packagepath:e:\WinPE_LangPacks\x86\ru-ru\lp.cab

Диск E это DVD с WAIK.
Устанавливаем русский язык языком по умолчанию:

dism /image:d:\Data\OsDeployImages\boot\ork\image\mount\ /set-allintl:ru-ru

Учитывая что я обычно гружусь по сети, то необходимо интегрировать в образ все необходимые драйвера сетевых карт для поддержки любого имеющегося у меня оборудования. Сложил я все драйвера в директорию D:\Data\OsDeployImages\boot\drivers, где для каждой железяки создана отдельная директория с драйверами для нее. И тут меня ждал сюрприз – теперь inf файл нужно указывать конкретно, указание путь\*.inf как было раньше уже не работает. Ручками перепысывать было лень и появился такой маленький скрипт для powershell:

Get-ChildItem D:\Data\OsDeployImages\boot\drivers -recurse | where {$_.extension -eq “.inf” } | select fullname | foreach-object { echo “Dism /image:d:\Data\OsDeployImages\boot\work\image\mount /Add-Driver /Driver:”$_.fullname} | out-file d:\list.txt -encoding ascii

После его работы получаем список вида:

Dism /image:d:\Data\OsDeployImages\boot\work\image\mount /Add-Driver /Driver:D:\Data\OsDeployImages\boot\drivers\2510p\e1000325.inf
Dism /image:d:\Data\OsDeployImages\boot\work\image\mount /Add-Driver /Driver:D:\Data\OsDeployImages\boot\drivers\2510p\E1E5132.INF
Dism /image:d:\Data\OsDeployImages\boot\work\image\mount /Add-Driver /Driver:D:\Data\OsDeployImages\boot\drivers\2510p\E1e6032.inf
Dism /image:d:\Data\OsDeployImages\boot\work\image\mount /Add-Driver /Driver:D:\Data\OsDeployImages\boot\drivers\2510p\e1g6032.inf
Dism /image:d:\Data\OsDeployImages\boot\work\image\mount /Add-Driver /Driver:D:\Data\OsDeployImages\boot\drivers\2510p\e1q5132.inf
Dism /image:d:\Data\OsDeployImages\boot\work\image\mount /Add-Driver /Driver:D:\Data\OsDeployImages\boot\drivers\2510p\e1q6032.inf
Dism /image:d:\Data\OsDeployImages\boot\work\image\mount /Add-Driver /Driver:D:\Data\OsDeployImages\boot\drivers\2510p\PRO1000\DOS\oemsetup.inf
Dism /image:d:\Data\OsDeployImages\boot\work\image\mount /Add-Driver /Driver:D:\Data\OsDeployImages\boot\drivers\2510p\PRO1000\Win32\e1000325.inf
Dism /image:d:\Data\OsDeployImages\boot\work\image\mount /Add-Driver /Driver:D:\Data\OsDeployImages\boot\drivers\2510p\PRO1000\Win32\E1E5132.INF

который просто исполняем.

Далее добавляем нужные программы:

Создаем директорию d:\Data\OsDeployImages\boot\work\image\mount\Tools и в нее добавляем все, что нам нужно. Для снятия образов нужно не забыть скопировать на него утилиту imagex.
Если необходимо запускать какую-то программу после загрузки, то добавляем ее в файлик d:\Data\OsDeployImages\boot\work\image\mount\Windows\System32\Startnet.cmd Вообще-то для этого существует файл Winpeshl.ini, но вот я после загрузки запускаю Far Manager. Если его запуск прописать в Winpeshl.ini то startnet.cmd почему-то не отрабатывает. Почему не знаю, у меня работало именно таким образом.
После чего командой
dism /unmount-Wim /MountDir:d:\Data\OsDeployImages\boot\work\image\mount /Commit
отмонтируем образ boot.wim и на этом этап создания образа окончен. Добавляем его например как boot image в WDS сервер и получаем возможность загрузить по сети любой компьютер.
Если нужна загрузка с DVD, то все достаточно просто:

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

dism /mount-wim /wimfile:d:\Data\OsDeployImages\boot\work\image\boot.wim /index:1 /mountdir:d:\Data\OsDeployImages\boot\work\image\mount

и создаем загрузочное меню:

Bcdedit /createstore d:\Data\OsDeployImages\boot\work\image\mount\boot\BCD
Bcdedit /store d:\Data\OsDeployImages\boot\work\image\mount\boot\BCD -create {bootmgr} /d “Boot Manager”
Bcdedit /store d:\Data\OsDeployImages\boot\work\image\mount\boot\BCD -set {bootmgr} device boot
Bcdedit /store d:\Data\OsDeployImages\boot\work\image\mount\boot\BCD -create /d “WINPE” -application osloader
После данной команды будет выдан ID, который необходимо запомнить. {668f076f-a44f-11de-aab5-002264ad89b9}
Bcdedit /store d:\Data\OsDeployImages\boot\work\image\mount\boot\BCD -set {668f076f-a44f-11de-aab5-002264ad89b9} osdevice boot
Bcdedit /store d:\Data\OsDeployImages\boot\work\image\mount\boot\BCD -set {668f076f-a44f-11de-aab5-002264ad89b9} device boot
Bcdedit /store d:\Data\OsDeployImages\boot\work\image\mount\boot\BCD -set {668f076f-a44f-11de-aab5-002264ad89b9} path \windows\system32\winload.exe
Bcdedit /store d:\Data\OsDeployImages\boot\work\image\mount\boot\BCD -set {668f076f-a44f-11de-aab5-002264ad89b9} systemroot \windows
Bcdedit /store d:\Data\OsDeployImages\boot\work\image\mount\boot\BCD -set {668f076f-a44f-11de-aab5-002264ad89b9} winpe yes
Bcdedit /store d:\Data\OsDeployImages\boot\work\image\mount\boot\BCD -displayorder {668f076f-a44f-11de-aab5-002264ad89b9} -addlast
oscdimg -n -m -o -bd:\Data\OsDeployImages\boot\work\image\etfsboot.com d:\Data\OsDeployImages\boot\work\image\mount d:\Data\OsDeployImages\boot\winpe_x86.iso

Все, загрузочный iso образ готов. Если boot.wim не нужен, то его можно отмонтировать.