Windows 11部署阶段通过SetupComplete.cmd设置默认壁纸,首次登录不生效的问题求助
Windows 11部署阶段通过SetupComplete.cmd设置默认壁纸,首次登录不生效的问题求助
问题分析
兄弟,我太懂你这种困惑了!你遇到的问题核心原因其实很明确:SetupComplete.cmd是用SYSTEM系统账户权限运行的,而你用SystemParametersInfo设置的是SYSTEM账户的壁纸,不是即将登录的新用户的。
Windows首次创建新用户时,会从「默认用户(Default User)」模板复制配置文件,SYSTEM账户的壁纸设置完全和新用户不搭边,而且OOBE(开箱体验)阶段结束后,系统还会自动加载默认的用户配置,直接把你在SYSTEM下的设置覆盖了——这就是为啥手动跑一遍脚本就生效(此时是用当前用户权限执行的),但部署后首次登录不行。
至于证书注入没问题,是因为证书是装在**系统级证书存储(Local Machine)**里的,SYSTEM权限能直接修改,对所有用户生效;但壁纸是纯用户级别的设置,两者的生效逻辑完全不一样。
解决方案
给你两个靠谱的方案,选哪个看你的需求:
方案1:直接修改默认用户模板(推荐)
这个方案能让所有新创建的用户自动继承壁纸设置,一劳永逸。把你的chgwallpaper.ps1替换成下面的内容就行:
# 先把壁纸复制到系统公共目录(避免新用户权限不足) $sourceImg = "$env:SystemRoot\Setup\Scripts\MyPicture.jpg" $targetImg = "$env:SystemRoot\Web\Wallpaper\CustomWallpaper.jpg" Copy-Item $sourceImg $targetImg -Force # 加载默认用户的注册表 hive $defaultUserHive = "$env:SystemDrive\Users\Default\NTUSER.DAT" reg load HKU\DefaultUser $defaultUserHive # 设置默认用户的壁纸相关注册表项 # Wallpaper:壁纸路径 # WallpaperStyle:显示样式(0=居中,1=平铺,2=拉伸,10=填充,根据需求改) # TileWallpaper:是否平铺(0=否,1=是) Set-ItemProperty -Path "HKU:\DefaultUser\Control Panel\Desktop" -Name "Wallpaper" -Value $targetImg Set-ItemProperty -Path "HKU:\DefaultUser\Control Panel\Desktop" -Name "WallpaperStyle" -Value "10" Set-ItemProperty -Path "HKU:\DefaultUser\Control Panel\Desktop" -Name "TileWallpaper" -Value "0" # 卸载默认用户注册表 hive reg unload HKU\DefaultUser # 顺带设置SYSTEM账户的壁纸(可选,避免后续系统级操作的显示问题) $code = @' using System.Runtime.InteropServices; namespace Win32{ public class Wallpaper{ [DllImport("user32.dll", CharSet=CharSet.Auto)] static extern int SystemParametersInfo (int uAction , int uParam , string lpvParam , int fuWinIni) ; public static void SetWallpaper(string thePath){ SystemParametersInfo(20,0,thePath,3); } } '@ Add-Type $code [Win32.Wallpaper]::SetWallpaper($targetImg)
方案2:延迟到用户首次登录时执行
如果不想动默认用户模板,可以给所有用户加一个「首次登录自动执行」的脚本。修改你的SetupComplete.cmd,在原有内容后面加一行:
powershell -Command Set-ExecutionPolicy RemoteSigned && powershell -File "%SystemRoot%\Setup\Scripts\chgwallpaper.ps1" # 新增:添加RunOnce注册表项,用户首次登录时自动执行壁纸设置 reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce" /v SetCustomWallpaper /t REG_SZ /d "powershell -File ""%SystemRoot%\Setup\Scripts\chgwallpaper.ps1""" /f
这个方案会让每个用户第一次登录时自动跑一遍壁纸设置脚本,跑完就自动删除这个注册表项,不会重复执行。
额外注意点
- 一定要把壁纸放到所有用户都有权限访问的目录(比如
C:\Windows\Web\Wallpaper),别放在Setup\Scripts里,不然新用户可能没权限读取。 - 如果用方案1,记得测试默认用户模板的修改是否生效——可以用
reg load/reg unload命令验证注册表项是否正确写入。
备注:内容来源于stack exchange,提问作者Aaradhya Chauhan
相关产品推荐
相关产品推荐

