You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS CDK执行UserData脚本后重启Windows Server?

解决AWS CDK部署Windows实例加域后重启无效的问题

可能的原因

exit 3010仅在EC2Launch v2直接执行脚本时才会触发重启,如果脚本执行上下文不是EC2Launch v2的服务进程,或者退出码未被正确传递,就不会生效。常见场景包括:

  • 脚本在子进程中执行,退出码未被EC2Launch v2捕获
  • EC2Launch v2版本过旧,不支持该退出码
  • 用户数据脚本的执行阶段配置错误

可行解决方案

方案1:确保exit 3010被EC2Launch v2正确捕获

在CDK中配置Windows实例的用户数据时,直接将加域脚本作为EC2Launch v2的FirstBoot脚本执行,确保退出码被服务捕获:

// AWS CDK V2 代码示例
import { WindowsInstance } from 'aws-cdk-lib/aws-ec2';
import { UserData } from 'aws-cdk-lib/aws-ec2';

const userData = UserData.forWindows();
userData.addCommands(`
$domainCred = New-Object System.Management.Automation.PSCredential("domain-admin", (ConvertTo-SecureString "your-password" -AsPlainText -Force))
Add-Computer -DomainName "your-domain.local" -Credential $domainCred -Force -Restart:$false
exit 3010
`);

new WindowsInstance(this, 'WindowsADInstance', {
  // 补充实例配置:AMI、实例类型、VPC、安全组等
  userData: userData,
});

方案2:直接调用重启命令并配置后续任务

如果exit 3010仍无效,可直接使用PowerShell重启命令,同时通过EC2Launch v2配置重启后的后续任务:

# 加入AD域
$domainCred = New-Object System.Management.Automation.PSCredential("domain-admin", (ConvertTo-SecureString "your-password" -AsPlainText -Force))
Add-Computer -DomainName "your-domain.local" -Credential $domainCred -Force -Restart:$false

# 可选:配置重启后自动执行的后续脚本
& "C:\Program Files\Amazon\EC2Launch\ec2launch.exe" configure --run-once '{"script": "powershell.exe -Command \"Write-Host 重启后配置完成\""}'

# 强制重启实例
Restart-Computer -Force

方案3:排查EC2Launch v2状态

  1. 验证EC2Launch v2版本:运行Get-Command ec2launch,确保版本为最新(可通过AWS Systems Manager或手动更新)
  2. 查看执行日志:检查C:\ProgramData\Amazon\EC2Launch\log\ec2launch.log,确认脚本是否被执行、退出码是否被正确记录

内容的提问来源于stack exchange,提问作者Rudolf Starosta - Rudi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:41:15