尝试使用 Packer 对 AWS Windows Server 2016 实例进行 SysPrep 时抛出以下错误:
Build 'amazon-ebs' errored: Script exited with non-zero exit status: 1. Allowed exit codes are: [0]
我正在SysprepInstance.ps1
按照指定的方式调用脚本http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2launch.html#ec2launch-sysprep。
答案1
Castrohenge 的回答让我走上了正确的道路,但我更喜欢将“-NoShutdown”开关传递给 SysprepInstance.ps1 来实现相同的目标。
C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\SysprepInstance.ps1 -NoShutdown
还请记住,需要重新启动的功能可能会锁定 sysprep,并且无法向打包程序报告。为了解决这个问题,我只需使用“重新开始' 在 sysprep 之前在打包程序中配置程序。
答案2
该问题是由于SysprepInstance.ps1
脚本使用以下命令关闭实例而引起的:
# Finally, perform sysprep.
Start-Process -FilePath $sysprepPath -ArgumentList ("/oobe /shutdown /generalize `"/unattend:{0}`"" -f $answerFilePath) -Wait -NoNewWindow
我通过在SysprepInstance.ps1
运行之前进行修改来解决这个问题,如下所示:
$sysPrepInstanceFile = "C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\SysprepInstance.ps1"
(Get-Content $sysPrepInstanceFile -Verbose).Replace("/shutdown ", "") | Set-Content $sysPrepInstanceFile -Verbose