1

因此,我尝试使用 Amazons Ec2Config.exe -sysprep 命令对实例进行 sysprep 并准备将其克隆到新的 AMI 中,并安装我需要的程序。以下是我在这个特定的 powershell.ps1 脚本中运行的最后两行代码,它们似乎是横向的(我尝试了几种不同的执行 .exe 的方法,都产生了相同的结果):

cd "C:\Program Files\Amazon\Ec2ConfigService\"
./Ec2Config.exe -sysprep

如果我将这些行注释掉,登录到实例并手动运行完全相同的命令,事情就会按预期工作(这意味着所有相关的 xml 文件都已正确配置)。

现在,这就是有趣的地方。当这些行没有被注释掉并且脚本运行它们时,我可以登录到正在运行脚本的实例并通过进程资源管理器查看正在运行的 sysprep 进程,但它永远不会完成并且实例过早关闭。

我相信在这一点上,考虑到我可以看到进程在进程资源管理器中运行,我已经排除它是权限错误(脚本正在以“NT AUTHORITY\SYSTEM”用户的身份运行,并且 RunLevel 设置为最高)。

我的直觉告诉我,这与 Ec2config.exe -sysprep 不允许您为 sysprep 传递“/quiet”选项这一事实有关,但我不确定这是否重要。

有任何想法吗?

4

1 回答 1

0

我一直有同样的问题。我找到了亚马逊创建的脚本。它位于“C:\Program Files\Amazon\Ec2ConfigService\Scripts”中。它称为 InstallUpdates.ps1,在您登录时运行良好,并从管理员 powershell 提示符运行。我已经尝试了很多方法来让它远程工作。我能弄清楚如何让它远程运行的唯一方法是通过从批处理文件中调用它来运行它,但它就在那里。我得出了和你一样的结论。我相信 /quiet 需要传递给 ec2config 正在调用的 sysprep cmd。这是我正在尝试添加 /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 解析来完成此操作,但这有效,并且行数更少。我刚跑了这个,它就像一个冠军。希望这可以帮助。

于 2017-04-25T13:27:12.377 回答