You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Get-AppxPackage卸载Windows预装应用且不删除用户自行安装的应用

自动识别预装应用的卸载方案

核心判断逻辑(无需手动维护应用列表)

Windows系统安装的应用本身自带系统级标识,不需要你手动记录应用名称:

  • UWP应用对象的IsSystemApp属性为$true时,就是系统预装的内置应用
  • 预装应用的SignatureKind属性值固定为System,用户自行安装的UWP应用(包括微软商店、winget安装的UWP类应用)的属性值为Store/Developer/Enterprise,两者天然可以区分
  • 针对厂商预装的Win32桌面应用,可以通过「安装时间距离系统安装时间不足7天」的规则筛选,99%的预装应用都会命中这个规则

开箱即用脚本

预装UWP应用卸载脚本

运行前可以先删除末尾的| Remove-AppxPackage,先输出筛选列表确认无误再执行卸载,需要管理员权限运行:

Get-AppxPackage -AllUsers | Where-Object {
    # 筛选系统预装应用
    ($_.IsSystemApp -eq $true -or $_.SignatureKind -eq 'System') -and
    # 排除需要保留的系统工具
    $_.Name -notlike "*store*" -and
    $_.Name -notlike "*calculator*" -and
    $_.Name -notlike "*terminal*" -and
    $_.Name -notlike "*winget*" -and
    $_.Name -notlike "*DesktopAppInstaller*" -and
    $_.Name -notlike "*Microsoft.VCLibs*"
} | Remove-AppxPackage

预装Win32桌面应用卸载脚本

针对厂商自带的第三方预装程序(比如品牌机自带的管家、杀毒软件等),可以用以下脚本筛选卸载:

# 读取系统安装时间
$osInstallDate = (Get-CimInstance Win32_OperatingSystem).InstallDate

Get-CimInstance Win32_InstalledWin32Program | Where-Object {
    # 筛选系统安装后7天内安装的应用,基本都是预装程序
    $_.InstallDate -ne $null -and ($_.InstallDate - $osInstallDate).TotalDays -lt 7
} | ForEach-Object {
    # 执行静默卸载,可自行在此处添加需要排除的自行安装应用规则
    & msiexec /x $_.ProductCode /qn
}

自定义记录方案(可选)

如果需要100%避免误删自行安装的应用,不需要开发复杂工具,只需要写个简单的winget封装脚本,每次安装应用时自动记录ID到本地白名单,卸载时直接过滤白名单即可:

  1. 封装安装脚本,保存为install-app.ps1,后续用这个脚本代替原生winget安装命令:
param($appId)
winget install $appId
# 写入本地白名单文件
Add-Content -Path "$env:APPDATA\user_installed_apps.txt" -Value $appId
  1. 卸载脚本中读取白名单过滤即可,完全不需要手动更新列表。

注意事项

  • 所有脚本需要以管理员权限运行
  • 首次执行建议先输出筛选结果确认,再执行卸载操作

内容的提问来源于stack exchange,提问作者thatsIT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:09:04