如何在Windows 11新用户未登录前自动为其移除预装应用
如何在Windows 11新用户未登录前自动为其移除预装应用
这个问题我之前也踩过坑——刚创建的新用户还没登录,直接用Remove-AppxPackage指定用户名就会弹出「安全ID结构无效」的错误。核心原因是未登录的新用户,其用户配置文件还没被系统初始化(没有生成对应的用户目录和注册表项),系统找不到匹配的用户上下文来执行卸载操作。
下面给你一套完整的解决方案,结合优化后的PowerShell脚本,完美避开这个问题:
核心思路拆解
我把解决方案拆成两个关键层面,覆盖所有场景:
- 移除预配应用包:这是Windows给新用户部署预装应用的「模板」,移除后,所有新创建的用户(包括已创建但未登录的)在首次登录时,系统都不会自动安装这些应用,从根源上解决问题。
- 针对已创建但未登录的用户:通过用户SID(安全标识符)而非用户名来指定操作对象——用户创建后SID就已生成,哪怕配置文件没初始化,系统也能识别这个标识,不会再报错。
优化后的PowerShell脚本
function Remove-UnloggedUserApps { param( [Parameter(Mandatory=$true)] [string]$Username ) # 定义需要移除的预装应用包名称列表 $TargetApps = @( "Microsoft.549981C3F5F10", "Microsoft.BingNews", "Microsoft.BingWeather", "Microsoft.GamingApp", "Microsoft.GetHelp", "Microsoft.Getstarted", "Microsoft.MicrosoftEdge.Stable", "Microsoft.MicrosoftOfficeHub", "Microsoft.MicrosoftSolitaireCollection", "Microsoft.MicrosoftStickyNotes", "Microsoft.Paint", "Microsoft.People", "Microsoft.PowerAutomateDesktop", "Microsoft.ScreenSketch", "Microsoft.StorePurchaseApp", "Microsoft.Todos", "Microsoft.Windows.Photos", "Microsoft.WindowsAlarms", "Microsoft.WindowsCalculator", "Microsoft.WindowsCommunicationsApps", "Microsoft.WindowsFeedbackHub", "Microsoft.WindowsMaps", "Microsoft.WindowsNotepad", "Microsoft.WindowsSoundRecorder", "Microsoft.Xbox.TCUI", "Microsoft.XboxGameOverlay", "Microsoft.XboxGamingOverlay", "Microsoft.XboxIdentityProvider", "Microsoft.XboxSpeechToTextOverlay", "Microsoft.YourPhone", "Microsoft.ZuneMusic", "Microsoft.ZuneVideo", "MicrosoftTeams", "MicrosoftWindows.Client.WebExperience" ) # 第一步:获取目标用户的SID(关键:未登录用户的SID创建用户时就已生成) try { $UserSID = (Get-LocalUser -Name $Username -ErrorAction Stop).SID.Value Write-Host "成功获取用户 $Username 的SID:$UserSID" -ForegroundColor Cyan } catch { Write-Host "[错误] 无法找到用户 $Username:$_" -ForegroundColor Red return } # 第二步:针对目标用户的SID移除已注册的Appx包 foreach ($AppName in $TargetApps) { try { $AppPackage = Get-AppxPackage -Name $AppName -AllUsers | Where-Object { $_.PackageUserInformation[$UserSID] -ne $null } if ($AppPackage) { Write-Host "[移除中] $Username 的应用:$AppName" -NoNewline -ForegroundColor Green Remove-AppxPackage -Package $AppPackage.PackageFullName -User $UserSID -ErrorAction Stop Write-Host " [成功]" -ForegroundColor Green } } catch { Write-Host "[失败] $Username 的应用 $AppName:$_" -ForegroundColor Red } } # 第三步:移除系统预配应用包(影响所有未来新用户,以及当前未登录用户的首次登录) Write-Host "`n开始移除系统预配应用包(所有新用户将不再预装这些应用)..." -ForegroundColor Yellow foreach ($AppName in $TargetApps) { try { $ProvisionedPackage = Get-AppxProvisionedPackage -Online | Where-Object { $_.DisplayName -eq $AppName } if ($ProvisionedPackage) { Write-Host "[移除预配包] $AppName" -NoNewline -ForegroundColor Yellow Remove-AppxProvisionedPackage -Online -PackageName $ProvisionedPackage.PackageName -ErrorAction Stop Write-Host " [成功]" -ForegroundColor Yellow } } catch { Write-Host "[失败] 预配包 $AppName:$_" -ForegroundColor Red } } Write-Host "`n针对用户 $Username 的应用移除操作已全部完成!" -ForegroundColor Cyan }
脚本使用步骤
- 必须以管理员身份打开PowerShell:右键开始菜单 → 选择「Windows PowerShell (管理员)」,所有操作都需要管理员权限,否则会因权限不足失败。
- 加载函数:将上述脚本全部复制到PowerShell窗口中,按回车执行,完成函数定义。
- 调用函数执行移除:替换成你的新用户名,执行命令:
Remove-UnloggedUserApps -Username "你的新用户名"
重要注意事项
- 预配包的优先级:如果只需要让新用户登录时不安装这些应用,单独执行移除预配包的步骤就足够,这是一劳永逸的操作。
- 系统核心应用:列表里的
Microsoft.WindowsNotepad、Microsoft.Paint等是系统基础应用,移除后可能影响日常使用,不需要的话可以从$TargetApps列表中删除对应项。 - SID的作用:通过SID指定用户,是避开「安全ID结构无效」错误的关键——系统能识别用户的安全标识符,哪怕用户还没登录、配置文件未生成。




