Сценарий автоматической установки Windows без создания второго пользователя группы Администраторы

от автора

Автоматизация процесса установки с использованием файла ответов

Автоматизация процесса установки с использованием файла ответов

Начиная с Windows 7 компания Microsoft разработала новую технологию массовой установки (развёртывания) своей операционной системы. В оригинальных образах дистрибутивов появились ключевые файлы boot.wim и install.wim, которые являются Предустановочной средой (англ. — Preinstallation Environment, PE) и Устанавливаемой системой, соответственно. И хотя, версии Windows: 7, 8, 8.1 являются устаревшими, а текущими являются версии Windows: 10 и 11, процесс развёртывания (автоматической установки) указанных операционных систем в целом не поменялся. Поэтому приведённые здесь мои наработки работоспособны для всех версий, за исключением некоторых не критичных параметров. А вот в Windows XP всё было по-другому.

Официальная документация и инструменты

На сайте Microsoft Learn — документации компании, есть раздел посвящённый загрузке и установке Windows для производителей компьютеров. Там присутствует подраздел Windows Setup Automation Overview (рус. — Обзор автоматической установки Виндовс). В этом и последующих разделах (есть перевод на русский язык, но может быть несовершенным) подробно описано использование файлов сценариев, этапы установки ОС, конфигурирование системы с помощью скриптов. Замечу, что когда сам осваивал эту технологию и лет 8 назад читал официальную документацию — информация подавалась более логично и полно, а сейчас как-то намешано и неясно, но другого официального источника не нашел нет.

Для создания (генерирования) подходящего сценария автоматической установки — файла autounattend.xml к предполагаемому для развёртывания Установочного образа — файла install.wim используется официальный бесплатный инструмент — Windows Assessment and Deployment Kit (рус. — Средство оценки и развёртывания Виндовс). Скачать подходящую версию можно со страницы Download and install the Windows ADK, а после установить на свой компьютер. Править файл сценария можно и в обычном текстовом редакторе, если знаешь что делаешь, но после желательно проверить ошибки в синтаксисе и применимость параметров к развёртываемому образу с помощью конфигуратора.

Пример файла сценария автоматической установки

Мой вариант создан для автоматической установки 64-битной версии Windows 10 VL (корпоративное лицензирование без ввода ключа во время установки). Указаны языковые параметры, применены некоторые твики, выполнен «трюк» с пользователями, и скрыты различные экраны подтверждения. Работа с диском оставлена на «ручную» настройку.

Файл autounattend.xml целиком
<?xml version="1.0" encoding="utf-8"?> <unattend xmlns="urn:schemas-microsoft-com:unattend">     <settings pass="windowsPE">         <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">             <InputLocale>en-US</InputLocale>             <SystemLocale>ru-RU</SystemLocale>             <UILanguage>ru-RU</UILanguage>             <UserLocale>ru-RU</UserLocale>         </component>         <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">             <ImageInstall>                 <OSImage>                     <InstallFrom>                         <MetaData wcm:action="add">                             <Key>/image/index</Key>                             <Value>1</Value>                         </MetaData>                     </InstallFrom>                 </OSImage>             </ImageInstall>             <UserData>                 <AcceptEula>true</AcceptEula>             </UserData>         </component>     </settings>     <settings pass="specialize">         <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">             <DisableWER>1</DisableWER>         </component>         <component name="Microsoft-Windows-RemoteAssistance-Exe" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">             <fAllowFullControl>false</fAllowFullControl>             <fAllowToGetHelp>false</fAllowToGetHelp>             <fEnableChatControl>false</fEnableChatControl>         </component>         <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">             <ComputerName>*</ComputerName>         </component>         <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">             <CEIPEnabled>0</CEIPEnabled>         </component>         <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">             <DisableSR>1</DisableSR>         </component>     </settings>     <settings pass="oobeSystem">         <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">             <InputLocale>en-US</InputLocale>             <SystemLocale>ru-RU</SystemLocale>             <UILanguage>ru-RU</UILanguage>             <UserLocale>ru-RU</UserLocale>         </component>         <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">             <AutoLogon>                 <Enabled>true</Enabled>                 <LogonCount>1</LogonCount>                 <Password>                     <PlainText>true</PlainText>                     <Value></Value>                 </Password>                 <Username>Administrator</Username>             </AutoLogon>             <FirstLogonCommands>                 <SynchronousCommand wcm:action="add">                     <CommandLine>net user Временный /delete</CommandLine>                     <Order>1</Order>                 </SynchronousCommand>             </FirstLogonCommands>             <OOBE>                 <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>                 <HideOnlineAccountScreens>true</HideOnlineAccountScreens>                 <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>                 <ProtectYourPC>3</ProtectYourPC>             </OOBE>             <TimeZone>Russian Standard Time</TimeZone>             <UserAccounts>                 <AdministratorPassword>                     <PlainText>true</PlainText>                     <Value></Value>                 </AdministratorPassword>                 <LocalAccounts>                     <LocalAccount wcm:action="add">                         <Group>Users</Group>                         <Name>Временный</Name>                         <Password>                             <PlainText>true</PlainText>                             <Value></Value>                         </Password>                     </LocalAccount>                 </LocalAccounts>             </UserAccounts>         </component>         <component name="Microsoft-Windows-WinRE-RecoveryAgent" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">             <UninstallWindowsRE>true</UninstallWindowsRE>         </component>     </settings> </unattend> 

Далее пройдём по этапам установки и параметрам указанным в соответствующих компонентах образа в файле сценария. Мой сценарий установки задаёт конфигурацию для следующих этапов: «windowsPE», «specialize», «oobeSystem».

Настройка установочной среды — этап «windowsPE»

Здесь с помощью группы параметров задаются языковые настройки. В настройках среды установки и устанавливаемой системы используется интерфейс на русском языке, русский формат даты и времени, но английская раскладка клавиатуры.

<InputLocale>en-US</InputLocale> <SystemLocale>ru-RU</SystemLocale> <UILanguage>ru-RU</UILanguage> <UserLocale>ru-RU</UserLocale>

Теоретически, один файл установочного образа системы — install.wim может содержать несколько индексов, т.е. разных редакций устанавливаемой ОС. Я подготавливаю свои образы так, чтобы они содержали только одну редакцию, а значит один индекс.

<ImageInstall>     <OSImage>         <InstallFrom>             <MetaData wcm:action="add">                 <Key>/image/index</Key>                 <Value>1</Value>             </MetaData>         </InstallFrom>     </OSImage> </ImageInstall>

Конечно, мы не хотим отвлекаться, чтобы ещё раз прочитать Лицензионное соглашение и принять его.

<UserData>     <AcceptEula>true</AcceptEula> </UserData>

Конфигурирование системы — этап «specialize»

Каждый параметр на этом этапе задаёт определённые значения для компонентов. Кто читал мои предыдущие статьи — знает, что мне нравится оптимизировать работу ОС, отключая всё лишнее, ненужное. Так и здесь, указанные параметры в основном что-либо отключают. Данные действия также можно выполнить ручной настройкой на установленной системе.

Отключение отправки отчёта об ошибках в корпорацию Microsoft.

<DisableWER>1</DisableWER>

Отключение функций удалённого помощника средствами Windows.

<fAllowFullControl>false</fAllowFullControl> <fAllowToGetHelp>false</fAllowToGetHelp> <fEnableChatControl>false</fEnableChatControl>

Важный параметр — имя компьютера. Если этот параметр пропустить, то установка прервётся и спросит. Можно указать любое, но если с одного файла сценария будут произведены установки на множество компьютеров в локальной сети, то возникнут конфликты одинаковых имён. Указывается символ «*«, чтобы имена генерировались случайно.

<ComputerName>*</ComputerName>

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

<CEIPEnabled>0</CEIPEnabled>

Отключение системы восстановления Windows считаю рациональным решением, так как при серьёзных повреждениях ОС — мне её проще переустановить предварительно сохранив пользовательские файлы, чем выяснять причины невозможности загрузки.

<DisableSR>1</DisableSR>

Подготовка к первому запуску — этап «oobeSystem»

Повторение настройки языковых параметров, но уже для установленной системы.

<InputLocale>en-US</InputLocale> <SystemLocale>ru-RU</SystemLocale> <UILanguage>ru-RU</UILanguage> <UserLocale>ru-RU</UserLocale>

В случае ручной установки, на завершающем этапе, программа предложит установщику создать пользователя, указав его имя и другие данные. Отказаться от создания пользователя — нельзя! Созданный пользователь будет принадлежать к группе «Администраторы» и войдёт в систему по завершении установки. Встроенный пользователь Администратор также присутствует но будет отключён по-умолчанию. Это излишество, а также потенциальная уязвимость.

Я придумал следующий обходной трюк: создаём временного пользователя (в примере — имя «Временный») в группе Пользователи. Также, включаем встроенного Администратора с пустым паролем и разрешаем ему автоматическую авторизацию в системе. Задаём для Администратора асинхронную команду, выполняемую при первом входе — удалить пользователя «Временный». После перезагрузки Администратор выполняет команду и остаётся единственным (и всемогущим) активным пользователем в системе.

<AutoLogon>     <Enabled>true</Enabled>     <LogonCount>1</LogonCount>     <Password>         <PlainText>true</PlainText>         <Value></Value>     </Password>     <Username>Administrator</Username> </AutoLogon> <FirstLogonCommands>     <SynchronousCommand wcm:action="add">         <CommandLine>net user Временный /delete</CommandLine>         <Order>1</Order>     </SynchronousCommand> </FirstLogonCommands> <UserAccounts>     <AdministratorPassword>         <PlainText>true</PlainText>         <Value></Value>     </AdministratorPassword>     <LocalAccounts>         <LocalAccount wcm:action="add">             <Group>Users</Group>             <Name>Временный</Name>             <Password>                 <PlainText>true</PlainText>                 <Value></Value>             </Password>         </LocalAccount>     </LocalAccounts> </UserAccounts>

Скрываем финальные диалоги входа в аккаунт Microsoft, подключения к беспроводным сетям и установливаем уровень безопасности.

<HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> <ProtectYourPC>3</ProtectYourPC>

Обязательно указать часовой пояс, иначе процесс автоматической установки также прервётся запросом. Словесное наименование своего часового пояса нужно узнать из справочника. В моём примере — время по-Москве.

<TimeZone>Russian Standard Time</TimeZone>

Отдельным и последним параметром идёт команда удалить агент восстановления Windows, как ненужный.

<UninstallWindowsRE>true</UninstallWindowsRE>

Послесловие

Рассмотренный файл сценария autounattend.xml у меня сохранён в кодировке UTF-8, так что если копировать из статьи нужно поступить также. Для личных нужд имею модифицированные файлы autounattend-mbr.xml и autounattend-gpt.xml, в которых указаны параметры для автоматической разбивки диска в соответствующих стандартах. В общем, вариантов много и каждый может детально изучив документацию создать свой сценарий автоматической установки Windows.


ссылка на оригинал статьи https://habr.com/ru/articles/818835/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *