EC2 Windows实例通过用户数据执行脚本失败:未生成预期文件
EC2 Windows实例用户数据脚本没生成文件?这么排查
先查执行日志
Windows实例里,用户数据的执行日志位置分两种:
- 老实例用EC2ConfigService:日志在
C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog.txt - 新实例用EC2Launch v2:日志在
C:\ProgramData\Amazon\EC2Launch\log\agent.log
直接打开日志搜报错,比如权限不足、路径写错这类问题,一查一个准。
脚本本身的坑点排查
- 路径和日期格式:
你脚本里用$env:SystemRoot理论上对应C:\Windows,但不如直接写死C:\Windows\Temp试试,避免变量解析出问题。另外日期格式里的hh是12小时制,换成HH(24小时制),或者干脆用MMddyyHHmm这种不带横杠的格式,防止特殊字符导致路径无效。 - 加强制参数和日志输出:
把脚本改成这样,强制创建文件同时记录执行情况:
加$logPath = "C:\Windows\Temp\userdata-log.txt" $file = "C:\Windows\Temp\" + (Get-Date).ToString("MM-dd-yy-HH-mm") "准备创建文件:$file" | Out-File $logPath -Append New-Item $file -ItemType file -Force "创建结果:$?" | Out-File $logPath -Append-Force能确保就算有重名文件或者权限小问题也能创建,日志能直接告诉你到底成功没。
其他可能的原因
- 用户数据没重新执行:如果是已经在运行的实例,改完用户数据后得重启EC2ConfigService/EC2Launch服务,或者直接重启实例,不然新的用户数据不会跑。
- 临时文件被清理:Windows的Temp目录有自动清理机制,刚创建的文件可能被删了,换个路径比如
C:\Temp(先手动建这个文件夹)测试下,排除清理的问题。
修正后的完整脚本
<powershell> $filePath = "C:\Windows\Temp\" + (Get-Date).ToString("MM-dd-yy-HH-mm") New-Item -Path $filePath -ItemType File -Force Write-Output "已创建文件:$filePath" | Out-File "C:\Windows\Temp\userdata-exec.log" -Append </powershell> <persist>true</persist>
内容的提问来源于stack exchange,提问作者xianjie wang
相关产品推荐
相关产品推荐

