You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Windows 11新用户未登录前自动为其移除预装应用

如何在Windows 11新用户未登录前自动为其移除预装应用

这个问题我之前也踩过坑——刚创建的新用户还没登录,直接用Remove-AppxPackage指定用户名就会弹出「安全ID结构无效」的错误。核心原因是未登录的新用户,其用户配置文件还没被系统初始化(没有生成对应的用户目录和注册表项),系统找不到匹配的用户上下文来执行卸载操作。

下面给你一套完整的解决方案,结合优化后的PowerShell脚本,完美避开这个问题:

核心思路拆解

我把解决方案拆成两个关键层面,覆盖所有场景:

  1. 移除预配应用包:这是Windows给新用户部署预装应用的「模板」,移除后,所有新创建的用户(包括已创建但未登录的)在首次登录时,系统都不会自动安装这些应用,从根源上解决问题。
  2. 针对已创建但未登录的用户:通过用户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
}

脚本使用步骤

  1. 必须以管理员身份打开PowerShell:右键开始菜单 → 选择「Windows PowerShell (管理员)」,所有操作都需要管理员权限,否则会因权限不足失败。
  2. 加载函数:将上述脚本全部复制到PowerShell窗口中,按回车执行,完成函数定义。
  3. 调用函数执行移除:替换成你的新用户名,执行命令:
    Remove-UnloggedUserApps -Username "你的新用户名"
    

重要注意事项

  • 预配包的优先级:如果只需要让新用户登录时不安装这些应用,单独执行移除预配包的步骤就足够,这是一劳永逸的操作。
  • 系统核心应用:列表里的Microsoft.WindowsNotepadMicrosoft.Paint等是系统基础应用,移除后可能影响日常使用,不需要的话可以从$TargetApps列表中删除对应项。
  • SID的作用:通过SID指定用户,是避开「安全ID结构无效」错误的关键——系统能识别用户的安全标识符,哪怕用户还没登录、配置文件未生成。

火山引擎 最新活动