Ec2Config.exe -sysprep VIA powershell Script
Поэтому я пытаюсь использовать команду Amazons Ec2Config.exe -sysprep для sysprep экземпляра и подготовки его к клонированию в новый AMI с программами, которые мне требуются. Ниже приведены последние две строки кода, которые я запускаю в этом конкретном скрипте powershell.ps1, и они, кажется, идут вразрез (я пробовал несколько разных способов выполнения.exe, все дали одинаковые результаты):
cd "C:\Program Files\Amazon\Ec2ConfigService\"
./Ec2Config.exe -sysprep
Если я закомментирую эти строки, войду в экземпляр и выполню те же самые команды вручную, все будет работать так, как ожидается (что подразумевает, что все связанные XML-файлы правильно настроены).
Теперь вот где это становится интересным. Когда эти строки не закомментированы и скрипт выполняет их, я могу войти в экземпляр, на котором выполняется сценарий, и увидеть процесс sysprep, запущенный через обозреватель процессов, но он никогда не завершается и экземпляр преждевременно завершает работу.
Я полагаю, что на данный момент, учитывая, что я вижу процесс, выполняющийся в проводнике процессов, я исключил, что это ошибка прав доступа (сценарий запускается как пользователь "NT AUTHORITY\SYSTEM" с RunLevel, установленным в значение Highest).
Мой инстинкт подсказывает мне, что это связано с тем, что Ec2config.exe -sysprep не позволяет вам передать опцию "/quiet" для sysprep, но я не уверен, имеет ли это значение.
Есть идеи?
2 ответа
Я нашел документ AWS System Manager : AWSEC2-RunSysprep Кажется, он запускает sysprep на виртуальной машине. Я не могу найти документацию. Я использовал его, и он выполняет «sysprep» виртуальную машину для повторного использования. Важно: вам необходимо удалить виртуальную машину из ее домена перед запуском sysprep. Этот скрипт выполнит работу через ssm и создаст локальную учетную запись. Вам нужно будет перезагрузиться вручную:
$password = ConvertTo-SecureString "YOURPASSWORD" -AsPlainText -Force
$username = "YOURACCOUNTNAME"
New-LocalUser -Name "$username" -Password $password
Add-LocalGroupMember -Group Administrators -Member $username
Add-LocalGroupMember -Group "Remote Desktop Users" -Member $username
$localCredential = New-Object System.Management.Automation.PSCredential($username,$password)
Remove-Computer -UnjoinDomainCredential $localCredential -PassThru -Force -WorkgroupName 'WORKGROUP' -Restart
У меня была такая же проблема. Я нашел скрипт, который создал Amazon. Он находится в "C:\Program Files\Amazon\Ec2ConfigService\Scripts". Это вызов InstallUpdates.ps1, который отлично работает, когда вы вошли в систему, и запускается из командной строки администратора powershell. Я пробовал множество вещей, чтобы заставить его работать удаленно. Единственный способ выяснить, как заставить его запускать remotelty, - запустить его, вызвав его из пакетного файла, но он просто сидит там. Я пришел к тому же выводу, что и вы. Я полагаю, что /quiet необходимо передать в команду sysprep, которую вызывает ec2config. Вот что я делаю в попытке добавить /quiet:
$path = 'C:\Program Files\Amazon\Ec2ConfigService\Settings\BundleConfig.xml'
$BCxml = Get-Content $path
$BCxml = ($BCxml).replace('<Switches>/oobe /shutdown /generalize</Switches>', '<Switches>/oobe /shutdown /generalize /quiet</Switches>')
$BCxml | out-file $path -Force
Я мог бы сделать это с помощью некоторого разбора XML, но это работает, и это меньше строк. Я просто запустил это, и это работает как чемпион. Надеюсь это поможет.