UserData产品文档:https://cloud.tencent.com/document/product/213/17526
UserData依赖cloudbase-init,cloudbase-init依赖光驱,请不要禁用cloudbase-init服务或改动它、不要禁用光驱,不要删除光驱盘符,如果有安全软件,可能会拦截cloudbase-init,因为cloudbase-init通过python起作用,安全软件可能会认为这是风险项,因此有必要在安全软件里进行cloudbase-init的信任。
没禁用光驱就还好说,禁用了就无需向下看了。
自定义镜像忘记镜像里的密码了,把光驱盘符也去掉了(导致设置密码不生效),也不想重新做镜像,还想用这个镜像买机器,还想用密码登录,咋办?
UserData是RunInstances的一个参数,如果没勾选Base编码,那就是明文代码,如果勾选了,UserData就是一个String类型的参数,整段UserData代码需要base64编码后作为一行字符串传给UserData
买Windows机器的时候,以下代码粘到购买界面高级设置部分的自定义数据(userdata)里,下单后,后台会先准备机器硬件、灌入系统、开机,然后cloudbase-init服务启动、cloudbase-init执行完毕,整个过程需要时间,耐心等待几分钟再登录,如果操之过急,会报用户名密码错误或干脆就登录不了。
注意,我在代码里写密码了,请把密码换成你自己的。
<powershell>
Set-ExecutionPolicy -Scope CurrentUser Unrestricted -force
if(-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")){
$arguments = "& '" $myinvocation.mycommand.definition "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}
net user Administrator "dqyJA3rn6<bf"
echo "REGEDIT4" > c:temp.reg
echo "[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon]" >> c:temp.reg
echo "`"AutoAdminLogon`"=`"1`"">> c:temp.reg
echo "`"DefaultUserName`"=`"Administrator`"" >> c:temp.reg
echo "`"DefaultPassword`"=`"dqyJA3rn6<bf`"" >> c:temp.reg
cmd /c "reg import c:temp.reg"
del "c:temp.reg" 2>&1 > $null
start-sleep 10
restart-computer -force 2>$null
exit 2>$null
</powershell>