前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >做Windows自定义镜像前配置开机后首次自动重启

做Windows自定义镜像前配置开机后首次自动重启

原创
作者头像
Windows技术交流
修改2025-05-20 16:17:23
修改2025-05-20 16:17:23
1190
举报
文章被收录于专栏:Windows技术交流Windows技术交流

发现个有意思的现象:

Windows公共镜像是sysprep的,买新机器或重装存量机器后,涉及开机后首次自动重启,用process explorer对pid为4的system进程查看加载的驱动,基本就2类:微软、云平台

而不涉及开机后首次重启的自定义镜像新购或重装后,用process explorer对pid为4的system进程查看加载的驱动,除过微软、云平台的,还有很多磁盘IO类驱动,厂商区别于前者,比如

发现新购或重装的系统,最好是完成初始化后重启一次来使用,至少磁盘IO相关驱动就顺溜了,这样健壮性比较好

以上发现启发我:对自定义镜像新购或重装,建议通过注册表实现开机后首次自动重启,方案如下:

步骤一、powershell配置开机自动登录(这里假设是默认的Administrator用户,注意具体化密码)

代码语言:txt
复制
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实现重启

代码语言:txt
复制
reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "RestartScript" /d "C:\restart.bat" /f

步骤三、创建C:\restart.bat内容如下

代码语言:txt
复制
@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

把以上方案做到自定义镜像里就可以实现开机后首次自动重启

还可以试试开机计划任务的方案来实现首次自动重启(不需要配置开机自动登录):

步骤一、创建计划任务

代码语言:txt
复制
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代码如下

代码语言:txt
复制
@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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档