无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 888|回复: 36
打印 上一主题 下一主题

[分享] 使用SetupComplete.cmd代替unattend.xml实现无人值守安装系统

[复制链接]
跳转到指定楼层
1#
发表于 4 天前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 baby1277 于 2025-6-29 22:29 编辑
  1. @echo off
  2. :: 配置用户
  3. set user=baby1277
  4. net user %user% "" /add
  5. :: 激活管理员账户
  6. net localgroup administrators %user% /add
  7. net user %user% /active:yes
  8. if /i not "%user%"=="Administrator" net user Administrator /active:no
  9. :: 配置自动登录
  10. reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f
  11. reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d %user% /f
  12. reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d "" /f
  13. :: 跳过OOBE
  14. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v "SkipMachineOOBE" /t REG_DWORD /d 1 /f
  15. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v "SkipUserOOBE" /t REG_DWORD /d 1 /f
复制代码
实现功能:创建本地用户 + 跳过OOBE
适用版本:理论上支持Win7-Win11所有常见的版本
使用方法:挂载WIM映像,把SetupComplete.cmd复制到Windows\Setup\Scripts文件夹。

SetupComplete.zip (611 Bytes, 下载次数: 71)

评分

参与人数 1无忧币 +5 收起 理由
Allreal + 5 很给力!

查看全部评分

2#
 楼主| 发表于 4 天前 | 只看该作者
本帖最后由 baby1277 于 2025-6-29 22:52 编辑

PS:设置密码会卡在登录界面,所以不能设置密码,暂时没能解决这个问题。

测试过ltsc_2019 和 win11_24h2没有发现问题, 其他版本失败请反馈。

回复

使用道具 举报

3#
发表于 4 天前 | 只看该作者
这俩能一样???


二○二五年六月二十八日
回复

使用道具 举报

4#
发表于 4 天前 | 只看该作者
各有各责!为何要代替?!都使用不好吗?!

点评

纯属研究下,多一个方法不是更好吗。  详情 回复 发表于 3 天前
回复

使用道具 举报

5#
发表于 4 天前 | 只看该作者
就要这样的简单粗暴!如可以再加个去WD就更好了!
回复

使用道具 举报

6#
发表于 4 天前 | 只看该作者
想法很好
回复

使用道具 举报

7#
发表于 3 天前 | 只看该作者
谢谢分享
回复

使用道具 举报

8#
发表于 3 天前 | 只看该作者
谢谢分享
回复

使用道具 举报

9#
发表于 3 天前 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

10#
发表于 3 天前 | 只看该作者

谢谢楼主分享
回复

使用道具 举报

11#
发表于 3 天前 | 只看该作者
想法不错 支持
回复

使用道具 举报

12#
发表于 3 天前 | 只看该作者
这个不错
回复

使用道具 举报

13#
发表于 3 天前 | 只看该作者
感谢分享
回复

使用道具 举报

14#
发表于 3 天前 | 只看该作者
谢谢分享
回复

使用道具 举报

15#
发表于 3 天前 | 只看该作者
SetupComplete.cmd在系统安装完成后、首次登录前执行,按理说这时候修改SkipMachineOOBE和SkipUserOOBE为1已经晚了,如果自动应答文件和镜像注册表都没有SkipMachineOOBE和SkipUserOOBE的内容,是无法实现无人值守安装的。

点评

所言不错,但是确实可以这样做,实践出来的才是结论。  详情 回复 发表于 3 天前
回复

使用道具 举报

16#
发表于 3 天前 | 只看该作者
感谢楼主分享
回复

使用道具 举报

17#
发表于 3 天前 | 只看该作者
试了安装ltsb2016,会出现选择键盘布局这样的画面,没有实现无人值守。

点评

测试了ltsb2019和Win11_24H2可以实现无人值守, 问题是不能设置密码,有点遗憾。  详情 回复 发表于 3 天前
回复

使用道具 举报

18#
发表于 3 天前 | 只看该作者

感谢分享
回复

使用道具 举报

19#
发表于 3 天前 | 只看该作者
谢谢分享
回复

使用道具 举报

20#
 楼主| 发表于 3 天前 | 只看该作者
hilsonma 发表于 2025-6-29 12:50
试了安装ltsb2016,会出现选择键盘布局这样的画面,没有实现无人值守。

测试了ltsb2019和Win11_24H2可以实现无人值守,  问题是不能设置密码,有点遗憾。

点评

按15楼提示,在释放镜像后重启之前离线修改注册表添加 skipmachineoobe=1 之后再配合楼主的设置就可以实现无人值守了,这样就可以不通过unattend.xml实现无人值守。  详情 回复 发表于 前天 00:41
回复

使用道具 举报

21#
 楼主| 发表于 3 天前 | 只看该作者
chishingchan 发表于 2025-6-28 22:35
各有各责!为何要代替?!都使用不好吗?!

纯属研究下,多一个方法不是更好吗。

点评

你这是说倒话吗?!你这叫少一个方法好吗?!  发表于 前天 12:54
回复

使用道具 举报

22#
 楼主| 发表于 3 天前 | 只看该作者
hlowld 发表于 2025-6-29 11:07
SetupComplete.cmd在系统安装完成后、首次登录前执行,按理说这时候修改SkipMachineOOBE和SkipUserOOBE为1 ...

所言不错,但是确实可以这样做,实践出来的才是结论。
回复

使用道具 举报

23#
发表于 前天 00:41 | 只看该作者
本帖最后由 hilsonma 于 2025-6-30 00:44 编辑
baby1277 发表于 2025-6-29 22:46
测试了ltsb2019和Win11_24H2可以实现无人值守,  问题是不能设置密码,有点遗憾。

按15楼提示,在释放镜像后重启之前离线修改注册表添加 skipmachineoobe=1 之后再配合楼主的设置就可以实现无人值守了,这样就可以不通过unattend.xml实现无人值守。

就是说,skipmachineoobe 不能在 setupcompete.cmd中设置,需要在unattend.xml中设置或者在重启前离线修改注册表。
回复

使用道具 举报

24#
发表于 前天 09:03 | 只看该作者
本帖最后由 hlowld 于 2025-6-30 09:45 编辑

如果楼主想要的是 “跳过OOBE,并自定义创建本地账户”,恰好前段时间也想过这个问题,分享一下我的方案
1、unattend.xml中跳过OOBE
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <unattend xmlns="urn:schemas-microsoft-com:unattend">
  3. <settings pass="oobeSystem">
  4. <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
  5. <InputLocale>zh-CN</InputLocale>
  6. <SystemLocale>zh-CN</SystemLocale>
  7. <UILanguage>zh-CN</UILanguage>
  8. <UserLocale>zh-CN</UserLocale>
  9. </component>
  10. <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
  11. <OOBE>
  12. <ProtectYourPC>3</ProtectYourPC>
  13. <HideEULAPage>true</HideEULAPage>
  14. <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
  15. <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
  16. <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
  17. <HideLocalAccountScreen>true</HideLocalAccountScreen>
  18. <SkipMachineOOBE>true</SkipMachineOOBE>
  19. <SkipUserOOBE>true</SkipUserOOBE>
  20. </OOBE>
  21. </component>
  22. </settings>
  23. </unattend>
复制代码

2、编写创建本地账户的批处理localaccount.cmd,倒计时10秒,若检测到按键,则交互界面创建账户后退出,否则创建admin空密码账户后退出
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. title 创建用户,请勿关闭本窗口

  4. for /l %%i in (10, -1, 1) do (
  5.     <nul set /p="将于 %%i 秒后自动创建 admin 空密码用户并退出,按任意键创建自定义用户 ..."
  6.     powershell.exe -noprofile -command "if ([console]::KeyAvailable) { $host.UI.RawUI.FlushInputBuffer(); exit 1 } else { exit 0 }" >nul 2>nul
  7.     if errorlevel 1 (cls & goto :want_uname)
  8.     ping 127.0.0.1 -n 1 -w 1000 >nul
  9.     cls
  10. )
  11. cls
  12. net user admin /add >nul 2>nul && (
  13.     net localgroup administrators admin /add >nul 2>nul && (echo 自动创建 admin 空密码用户成功,即将退出 & timeout /t 2 >nul & exit) || (net user admin /delete >nul 2>nul)
  14.     )
  15. echo 自动创建 admin 空密码用户失败,强制创建自定义用户
  16. :want_uname
  17. echo.
  18. set "uname="
  19. set /p uname=请键入用户名:
  20. if "%uname%" == "" goto want_uname
  21. :want_upass
  22. set "upass="
  23. for /f "delims=" %%P in ('powershell.exe -NoProfile -Command "$pwd = Read-Host ''请键入用户的密码'' -AsSecureString; [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd))"') do set "upass=%%P"
  24. set "upass2="
  25. for /f "delims=" %%P in ('powershell.exe -NoProfile -Command "$pwd = Read-Host ''请再键入一次密码以便确认'' -AsSecureString; [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd))"') do set "upass2=%%P"
  26. if "%upass%" neq "%upass2%" (echo 密码不匹配。 & goto want_upass)
  27. if "%upass%" equ "" (
  28.     net user %uname% /add >nul 2>nul && (
  29.         net localgroup administrators %uname% /add >nul 2>nul && (echo 创建 %uname% 用户成功,即将退出 & timeout /t 2 >nul & exit) || (echo 加入管理员群组失败 & net user %uname% /delete >nul 2>nul & goto want_uname)
  30.         ) || (echo 创建 %uname% 用户失败 & goto want_uname)
  31. ) else (
  32.     net user %uname% %upass% /add >nul 2>nul && (
  33.         net localgroup administrators %uname% /add >nul 2>nul && (echo 创建 %uname% 用户成功,即将退出 & timeout /t 2 >nul & exit) || (echo 加入管理员群组失败 & net user %uname% /delete >nul 2>nul & goto want_uname)
  34.         ) || (echo 创建 %uname% 用户失败 & goto want_uname)
  35. )
  36. exit
复制代码
3、SetupComplete.cmd中调用localaccount.cmd
  1. start /wait "localaccount" "%~dp0localaccount.cmd"
复制代码
4、挂载镜像Users\Default\ntuser.dat修改,禁止同意个人数据跨境传输界面
  1. reg load HKEY_USERS\uuu z:\Users\Default\ntuser.dat >nul 2>nul
  2. reg.exe add "HKEY_USERS\uuu\SOFTWARE\Microsoft\Windows\CurrentVersion\CloudExperienceHost\Intent\PersonalDataExport" /v "PDEShown" /t REG_DWORD /d "2" /f >nul 2>nul
  3. reg unload HKEY_USERS\uuu >nul 2>nul
复制代码
5、同理,可以编写修改计算机名的批处理computername.cmd并在SetupComplete.cmd中调用,倒计时10秒,若检测到按键,则交互界面修改计算机名后退出,否则修改为随机名称后退出。注意:修改计算机名重启后才能生效
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. title 设置计算机名,请勿关闭本窗口
  4. set "cname=WIN-%RANDOM%"
  5. for /l %%i in (10, -1, 1) do (
  6.     <nul set /p="将于 %%i 秒后自动设置计算机名为 %cname% 并退出,按任意键手工设置 ..."
  7.     powershell.exe -noprofile -command "if ([console]::KeyAvailable) { $host.UI.RawUI.FlushInputBuffer(); exit 1 } else { exit 0 }" >nul 2>nul
  8.     if errorlevel 1 (cls & goto :want_name)
  9.     ping 127.0.0.1 -n 1 -w 1000 >nul
  10.     cls
  11. )
  12. cls
  13. goto set_name
  14. :want_name
  15. echo.
  16. set "cname="
  17. set /p cname=请键入计算机名(字母、连字符和数字的组合):
  18. if "%cname%" == "" goto want_name
  19. :set_name
  20. powershell.exe -noprofile -command "Rename-Computer -NewName '%cname%'"  >nul 2>nul
  21. if errorlevel 0 (echo 设置计算机名为 %cname% 成功,即将退出 & timeout /t 2 >nul & exit)
  22. echo 设置计算机名为 %cname% 失败 & goto want_name
  23. exit
复制代码


当然,这些操作,都由一个批处理来自动实现,无需手动。


点评

SetupComplete无法和用户交互  详情 回复 发表于 前天 09:23
回复

使用道具 举报

25#
发表于 前天 09:09 | 只看该作者
感谢分享
回复

使用道具 举报

26#
发表于 前天 09:23 来自手机 | 只看该作者
hlowld 发表于 2025-6-30 09:03
如果楼主想要的是 “跳过OOBE,并自定义创建本地账户”,恰好前段时间也想过这个问题,分享一下我的方案
1 ...

SetupComplete无法和用户交互

点评

所以要另外写个批处理,SetupComplete.cmd用start方式调用该批处理,就能界面交互。  详情 回复 发表于 前天 09:35
回复

使用道具 举报

27#
发表于 前天 09:35 | 只看该作者
nttwqz 发表于 2025-6-30 09:23
SetupComplete无法和用户交互

所以要另外写个批处理,SetupComplete.cmd用start /wait方式调用该批处理,就能界面交互。

点评

这个确实可以,我用过。  详情 回复 发表于 前天 09:39
回复

使用道具 举报

28#
发表于 前天 09:39 来自手机 | 只看该作者
hlowld 发表于 2025-6-30 09:35
所以要另外写个批处理,SetupComplete.cmd用start /wait方式调用该批处理,就能界面交互。

这个确实可以,我用过。
回复

使用道具 举报

29#
发表于 前天 09:50 | 只看该作者
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-7-2 00:45

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表