Я рассказывал в блоге, как автоматизировать настройку профиля Default в WIM-образе. Это дает уже самый первый вход в Windows с заданными настройками учётной записи. Но модификация WIM не всегда подходит. Сегодня я покажу два других способа настройки профиля пользователя.
[+] Сегодня в программе
- Зачем это нужно
- Подход к решению
- Выбор между AutoUnattend.xml и setupcomplete.cmd
- Синхронные команды в файле ответов
- Импорт в реестр отдельными синхронными командами
- Импорт в реестр файла с твиками одной синхронной командой
- Команды в setupcomplete.cmd
- Бонус: настройка пользовательского профиля с помощью Active Setup
- Заключение
Зачем это нужно
К изменению профиля Default во время установки ОС приходят при сочетании нескольких условий.
- Настраиваются параметры пользователей. Если просто импортировать в раздел HKCU синхронными или асинхронными командами файла ответов, настройки применятся к профилю локальной системы.
- Профиль должен быть настроен на момент первого входа в систему первого пользователя. Поэтому FirstLogonCommands файла ответов не подходят, т.к. выполняются уже после входа.
- WIM-образ не подвергается другим изменениям / поддерживается несколько образов. Это необязательное условие. Но когда твик профиля Default – единственная модификация образа, нет смысла тратить время на возню с подключением WIM. А если нужно поддерживать в актуальном состоянии несколько образов, затраты по времени лишь увеличиваются.
Подход к решению
Правки в реестр пользователя Default можно вносить синхронными командами из AutoUnattend.xml. Я разберу этот способ, а также покажу альтернативный подход – файл setupcomplete.cmd, который можно использовать без файла ответов.
Алгоритм простой:
- До первого входа пользователя в систему файл NTUSER.DAT профиля Default подключается в раздел реестра
Custom
. - В этот раздел импортируются все пользовательские твики. Их можно прописать непосредственно в AutoUnattend.xml или setupcomplete.cmd, либо запускать из этих файлов отдельный REG/CMD-файл.
- Файл NTUSER.DAT отключается, после чего первый вход в систему выполняется уже с настроенным профилем.
Этому трюку много лет (по ссылке статья 2007 года), но там разбирается импорт по окончании установки.
Выбор между AutoUnattend.xml и setupcomplete.cmd
Написанное в этом разделе статьи верно как для настройки как профиля Default, так и системных параметров. Если у вас несколько простых твиков, проще использовать файл ответов. При большом количестве модификаций логично выносить твики в отдельный файл. Если они в формате CMD, привлекательность setupcomplete.cmd возрастает — пачку команд можно просто скопировать в него.
Способ | Преимущества | Недостатки |
---|---|---|
AutoUnattend.xml | • Портативность: можно внедрить все твики, обходясь единственным файлом
• Работает с любыми ключами продукта |
• Нет прав TrustedInstaller
• Длина команды ограничена 259 символами. Также, в сложных командах больше вероятность неверного синтаксиса и ошибки разбора программой установки. |
setupcomplete.cmd | • Простой синтаксис
• Есть права TrustedInstaller |
• Требуется структура папок для копирования файла на системный диск
• Не работает при использовании ОЕМ-ключей продукта, если издание не корпоративное. |
Обоими способами команды запускаются с правами SYSTEM. Однако необходимость также иметь права TrustedInstaller может сыграть ключевую роль при выборе. Например, я недавно разбирал, как предотвратить установку Teams. Допустим, что параметра файла ответов не существует, а известен лишь параметр реестра. Но владельцем целевого раздела является TrustedInstaller, а у SYSTEM права только на чтение.
Конечно, вы можете совмещать оба способа или включать в дистрибутив стороннее ПО для выполнения команд с правами TrustedInstaller.
Давайте разберем эти способы подробнее.
Синхронные команды в файле ответов
Синхронные команды выполняются последовательно. Их следует применять на этапе specialize. Возьмем практическую задачу. Я хочу пропустить этот экран OOBE.
При использовании локальной учетной записи это единственный шаг, для автоматизации которого не предусмотрен отдельный параметр файла ответов. Upd. Мне подсказывают, что экран блокируется параметром ProtectYourPC со значением 3
. Но допустим, что я об этом не знаю или параметра действительно не существует.
В реестре пропуск экрана обеспечивает параметр DisableTailoredExperiencesWithDiagnosticData
со значением 1
. Чтобы не видеть экран в самой первой учетной записи, необходимо наличие этой настройки в профиле Default.
Импорт в реестр отдельными синхронными командами
Такое решение годится для небольшого количества твиков. Понадобится как минимум три команды: загрузка файла NTUSER.DAT, импорт параметров и выгрузка файла.
<RunSynchronous> <RunSynchronousCommand wcm:action="add"> <Path>reg load HKEY_USERS\Custom %systemdrive%\Users\Default\NTUSER.DAT</Path> <Order>10</Order> <Description>Load NTUSER.DAT</Description> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Path>reg add HKEY_USERS\Custom\Software\Policies\Microsoft\Windows\CloudContent /v DisableTailoredExperiencesWithDiagnosticData /t REG_DWORD /d 1 /f</Path> <Order>15</Order> <Description>Skip privacy screen</Description> </RunSynchronousCommand> <RunSynchronousCommand wcm:action="add"> <Path>reg unload HKEY_USERS\Custom</Path> <Order>30</Order> <Description>Unload NTUSER.DAT</Description> </RunSynchronousCommand> </RunSynchronous>
Обратите внимание, что в команде импорта вместо раздела HKEY_CURRENT_USER
используется HKEY_USERS\Custom
. Между первой и последней командой вы можете добавить другие команды для внесения в реестр отдельных параметров.
Импорт в реестр файла с твиками одной синхронной командой
Если вы хотите импортировать REG- или CMD-файл со всеми своими твиками, можете положить его в корень установочного диска, рядом с setup.exe. Допустим, файл называется tweaks.reg. Заодно он сыграет роль маркерного файла – его мы будем искать на всех дисках, а потом импортируем в реестр. Если файл найден, выполняется уже знакомый вам импорт в Default. Команды разделяются точкой с запятой.
<RunSynchronous> <RunSynchronousCommand wcm:action="add"> <!-- The Path string must be less than 260 symbols --> <Path>powershell -command "(Get-Volume).DriveLetter | Foreach-Object {if (Test-Path "${PSItem}:\tweaks.reg") {reg load HKEY_USERS\Custom "%systemdrive%\Users\Default\NTUSER.DAT"; reg import "${PSItem}:\tweaks.reg"; reg unload HKEY_USERS\Custom}}"</Path> <Order>60</Order> <Description>Import tweaks from REG</Description> </RunSynchronousCommand> </RunSynchronous>
Длина строки в элементе Path не должна превышать 259 символов, но мы укладываемся. Строка такая длинная потому, что в ней собраны несколько команд. Вот они же более наглядно:
(Get-Volume).DriveLetter | Foreach-Object { if (Test-Path "${PSItem}:\tweaks.reg") { reg load HKEY_USERS\Custom "%systemdrive%\Users\Default\NTUSER.DAT" reg import "${PSItem}:\tweaks.reg" reg unload HKEY_USERS\Custom } }
Сначала получаем буквы томов и в корне каждого тома ищем файл tweaks.reg. Затем подключение куста, импорт твиков и отключение.
Команды в setupcomplete.cmd
В папке sources создайте структуру папок $OEM$\$$\Setup\Scripts. (Учтите, что размещение папки $OEM$ в корне установочного диска приводит к копированию его содержимого на системный диск.) В папку Scripts положите файл setupcomplete.cmd с командами. Подробнее читайте в справочнике автоустановки. Пример все того же твика с пропуском окна OOBE.
reg add HKEY_USERS\Custom\Software\Policies\Microsoft\Windows\CloudContent /v DisableTailoredExperiencesWithDiagnosticData /t REG_DWORD /d 1 /f
Если ваши твики в формате CMD, можете просто вставить их в setupcomplete.cmd. Чтобы импортировать параметры из отдельного REG-файла, положите его рядом с setupcomplete.cmd, в котором пропишите команду для импорта:
reg import %windir%\Setup\Scripts\tweaks.reg
Не забывайте отредактировать твики, чтобы импорт осуществлялся в раздел HKU\Custom
!
Бонус: настройка пользовательского профиля с помощью Active Setup
Есть еще один древний, но эффективный и в некоторых случаях необходимый способ — Active Setup! Я написал о нем в каналe Telegram.
Заключение
Автоматизация этапа установки OOBE в последние годы стала труднее. Количество экранов растет, а параметры файла ответов для них не делают. Это может быть связно с аспектами конфиденциальности, продвижением сервисов Microsoft или игнорированием нужд клиентов компании.
Конечно, ради одной установки нет смысла заниматься автоматизацией. Но при развертывании Windows в организациях или экспериментах в домашних условиях лишние экраны программы установки не нужны. Когда настройки OOBE сохраняются в реестре, вопрос решается импортом в Default. И теперь в блоге описан самый быстрый способ!
Андрей
Не понял про связь «пропустить экран OOBE» и DisableTailoredExperiencesWithDiagnosticData.
Этот экран и так пролетает.
Этого недостаточно?
Или я чего-то еще не знаю?
Vadim Sterkin
Связь прямая — параметр реестра отвечает за пропуск этого экрана. У меня экран отображается, но я не использую некоторые параметры ФО, перечисленные у вас. Например, SkipMachineOOBE и SkipUserOOBE не поддерживаются, я их не задействую. Из названий прочих ваших параметров связь с этим экраном не просматривается. Вы знаете, какой именно параметр ФО отвечает за пропуск этого экрана?
В любом случае, я демонстрирую прием, а какой параметр им вносить в реестр — не суть важно.
Андрей
Уже и не помню, что отключает этот экран. Он вроде самый последний, и никогда не был проблемой. Когда-то давно настроил и забыл. При переходе на Windows 11 тоже все пролетает. Про DisableTailoredExperiencesWithDiagnosticData вообще не знал.
Сейчас можно только гадать, что-то из этого или что-то другое:
или