发现个有意思的现象:
Windows公共镜像是sysprep的,买新机器或重装存量机器后,涉及开机后首次自动重启,用process explorer对pid为4的system进程查看加载的驱动,基本就2类:微软、云平台
而不涉及开机后首次重启的自定义镜像新购或重装后,用process explorer对pid为4的system进程查看加载的驱动,除过微软、云平台的,还有很多磁盘IO类驱动,厂商区别于前者,比如
发现新购或重装的系统,最好是完成初始化后重启一次来使用,至少磁盘IO相关驱动就顺溜了,这样健壮性比较好
以上发现启发我:对自定义镜像新购或重装,建议通过注册表实现开机后首次自动重启,方案如下:
步骤一、powershell配置开机自动登录(这里假设是默认的Administrator用户,注意具体化密码)
net user Administrator "具体化机器密码"
$UserName="Administrator"
$NewPassword="具体化机器密码"
([adsi]"WinNT://$ENV:COMPUTERNAME/$UserName").SetPassword("$NewPassword")
net accounts /lockoutthreshold:0
echo $? >>c:\test.txt
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /s|findstr "AutoAdminLogon DefaultUserName DefaultPassword DontDisplayLastUserName LastUsedUsername"
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "DefaultUserName" /d "Administrator" /t REG_SZ /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "DefaultPassword" /d "具体化机器密码" /t REG_SZ /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "AutoAdminLogon" /d "1" /t REG_SZ /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DontDisplayLastUserName /t REG_SZ /d 0 /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "LastUsedUsername" /d "Administrator" /t REG_SZ /f
#reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /s|findstr "AutoAdminLogon DefaultUserName DefaultPassword DontDisplayLastUserName LastUsedUsername"
Start-Process -NoNewWindow -Wait -FilePath "cmd.exe" -ArgumentList "/c reg query `"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon`" /s | findstr `"AutoAdminLogon DefaultUserName DefaultPassword DontDisplayLastUserName LastUsedUsername`""
echo $? >>c:\test.txt
步骤二、配置开机启动项执行C:\restart.bat实现重启
reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "RestartScript" /d "C:\restart.bat" /f
步骤三、创建C:\restart.bat内容如下
@echo off
if "%1"=="hide" goto :main
start /min cmd /c "%~f0" hide & exit
:main
:: 重启命令
shutdown -r -t 0 -f
:: 删除上一步中的开机启动项
reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "RestartScript" /f
把以上方案做到自定义镜像里就可以实现开机后首次自动重启
还可以试试开机计划任务的方案来实现首次自动重启(不需要配置开机自动登录):
步骤一、创建计划任务
schtasks /create /tn "\restart" /ru SYSTEM /rl highest /tr "cmd.exe /c C:\restart.bat" /sc onstart /f
schtasks /change /tn "\restart" /st 00:00 /sd 2000/01/01
步骤二、计划任务调用的C:\restart.bat代码如下
@echo off
if "%1"=="hide" goto :main
start /min cmd /c "%~f0" hide & exit
:main
:: 重启并禁用计划任务(重启一次,确保重启后计划任务不会再执行)
schtasks /change /tn "\restart" /DISABLE
shutdown -r -t 0 -f
以上2种首次自动重启的节奏可能不是严格在shell:startup或shell:common startup之前,相对来说,计划任务的方案比注册表的方案好一些,计划任务的方案差不多是EventId6005后2秒左右触发,而startup目录的程序一般是EventId6005后5秒左右触发,但重启有个过程,不好绝对地说,一定会在startup目录的程序运行之前就重启成功,如果想快速无感重启,最好做个可靠性高、优先级高的服务实现快速重启,在其他开机自动运行的程序之前。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有