如何使用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到本地白名单,卸载时直接过滤白名单即可:
- 封装安装脚本,保存为
install-app.ps1,后续用这个脚本代替原生winget安装命令:
param($appId) winget install $appId # 写入本地白名单文件 Add-Content -Path "$env:APPDATA\user_installed_apps.txt" -Value $appId
- 卸载脚本中读取白名单过滤即可,完全不需要手动更新列表。
注意事项
- 所有脚本需要以管理员权限运行
- 首次执行建议先输出筛选结果确认,再执行卸载操作
内容的提问来源于stack exchange,提问作者thatsIT
相关产品推荐
相关产品推荐

