Столкнулся со странной ошибкой при попытке выполнить SysPrep на уже установленной системе, которую планировались использовать для создания эталонного образа для развертывания Windows 10 средствами System Center Configuration Manager 2012 R2. При запуске SysPrep неожиданно появляется ошибка:
В английской версии Windows 10 ошибка аналогичная:
Откроем и проанализируем ошибки в файле журнала утилиты Sysprep setupact.log. В глаза сразу бросается следующая строка:
Т.е. ошибка явно сообщает, что запрещено выполнять Sysprep на системах, которые были обновлены с предыдущей версии Windows. В нашем случае это как раз так: одна система была получена путем апгрейда с Windows 7 до Windows 10, вторая через обновление с Windows 8.1. И действительно, согласно статье в базе знаний KB828287 : Microsoft не поддерживает использование Sysprep для создания образов для инсталляций Windows, которые были обновлены через режим апгрейда (установка SP при этом не считается апгрейдом). Windows разрешает выполнять только sysprep на системах, полученных в результате «чистой установки». Неужели в таком случае придется переустанавливать систему с нуля?
Мне удалось найти более простое решение. С помощью Process Monitor с фильтром для процесса sysprep.exe и сравнения чистой и «обновленной» Windows 10 удалось получить список ключей реестра, которые проверяются Sysprep при запуске на предмет определения чистая ли эта система или «обновленная». Итак, что нужно сделать, чтобы сбросить маркер «обновленной» системы для Windows 10, который проверяется утилитой Sysprep (для других версий ОС все аналогично):
- Открыть редактор реестра ( regedit.exe )
- Перейди в ветку HKEY_LOCAL_MACHINESYSTEMSetup
- Удалить вложенную ветку Upgrade (если есть) и параметр с именем Upgrade
- В ветке HKEY_LOCAL_MACHINESYSTEMSetupStatusSysprepStatus установить значений ключа CleanupState равным 7
- Осталось перезагрузить компьютер и попробовать выполнить SysPrep еще раз
Совет . В случае с Windows 10, чтобы SysPrep заработал, дополнительно пришлось удалить все нестандартные Modern приложения, которые индивидуально (не в режиме provision ) были установлены из Microsoft Store пользователями системы.
Это можно сделать, удалив все профили пользователей (если применимо), полностью удалив все Metro приложения для всех пользователей (не рекомендуемы способ), либо удалив такие приложения вручную. Последний вариант реализуется так:
- Получим список всех установленных Metro приложений в профилях всех пользователей (нас интересуют только пакеты со статусом Installed):
Get-AppxPackage -AllUser | Format-List -Property PackageFullName,PackageUserInformation
- И последовательно удалив их таким образом:
Remove-AppxPackage -Package <packagefullname>
. Или так:Remove-AppxProvisionedPackage -Online -PackageName <packagefullname>