尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

PowerShell清理Win10预装应用:从卸载、恢复到排错的全指南

PowerShell清理Win10预装应用:从卸载、恢复到排错的全指南 Windows 10用久了谁没被那排预装应用恶心过Xbox、Candy Crush、Bing新闻、OneNote一个个躺在开始菜单里看着碍眼用不上还占资源。更烦人的是你去设置里找卸载不少应用压根没有卸载按钮只有一个高级选项在那假装诚恳。今天这篇不整虚的就聊我用Windows PowerShell跟这些原生应用对线的心得——怎么把不用的东西干净地卸掉怎么把误删的宝贝装回来以及这一路上踩过的坑和排错的完整思路。Win10的原生应用和传统桌面软件有个本质区别它们走的是Appx包注册机制系统通过PowerShell里的Appx模块来管理。这意味着你没办法用控制面板那套卸载程序的思路去处理它们注册表卸载项里大多也找不到对应条目。设置应用里能卸的只是一部分比如计算器、相机这些自带工具你还能找到卸载入口但像Cortana、Xbox Game Bar这类深度集成的组件卸载按钮基本是灰的。实操场景就更多了。有人在公司环境里需要给几十台机器清理预装应用有人拿到LTSC版本想进一步精简系统还有人遇到应用商店闪退、应用无法启动的问题需要重新注册应用包。这些需求通过鼠标点设置基本做不了得靠PowerShell的一行命令或一段小脚本批量搞定。这篇文章适合谁如果你只是偶尔想卸掉一两个不用的应用看看第3节的命令就够用了如果你是系统管理员或者喜欢折腾系统镜像那第4节、第6节的恢复和离线部署部分会更对胃口。我尽量把每条命令背后的原理、每个参数为什么这样用、每个坑是怎么踩的都讲透方便你举一反三。1. 为什么要拿PowerShell折腾Win10自带应用1.1 那些设置里删不掉的应用PowerShell能治我当年第一次打算卸掉预装应用是在一台办公电脑上——那台机器预装了Bing新闻、Get Help、Xbox好几个我用不上的东西。打开设置应用应用和功能搜Bing News点进去发现卸载按钮确实是有的但某些应用点卸载系统会弹出提示无法卸载一些老版本Win10里像Cortana、Contact Support这类系统级组件你根本搜不到卸载入口。PowerShell的思路完全不同。它不关心系统提供不提供卸载入口它只认一件事这个应用包是否在Appx模块的注册表里。只要包被注册了Get-AppxPackage能查到Remove-AppxPackage就能删。一个形象的类比设置面板是前台客服能办的事有限PowerShell是后台数据库直连凡是登记的记录都能改。这就是为什么网上所有关于Win10纯净版禁用后台应用系统瘦身的教程最后都会绕到PowerShell上。1.2 一条命令看清系统里到底装了什么先别急着删第一步永远是看清楚。在开始菜单搜PowerShell右键选择以管理员身份运行然后敲下这条命令Get-AppxPackage | Select-Object Name, PackageFullName, InstallLocation输出结果会列出当前用户已经注册的每一个Appx包。Name是应用包的短名称比如Microsoft.WindowsStorePackageFullName是带版本号、架构、PublisherId的完整名称像Microsoft.WindowsStore_22310.1401.13.0_x64__8wekyb3d8bbweInstallLocation则告诉你这个包安装到了哪个目录通常是C:\Program Files\WindowsApps下的某个子目录。还有人问为什么有些应用在应用和功能列表里看着都差不多但PackageFullName五花八门因为Windows把普通应用、系统组件、驱动配套应用都走了一遍Appx注册流程PublisherId后缀比如8wekyb3d8bbwe就是微软官方签发身份的标识。看到这个后缀你就知道它是系统级包删的时候要格外小心。2. 先用这三条命令枚举、卸载、重装的完整语法2.1 Get-AppxPackage枚举是管理的基础Get-AppxPackage是Appx模块里最基本的三板斧之一它的作用是从当前用户的注册表中枚举出所有Appx包信息。新手最容易犯的错是不知道这个命令有几个关键参数-Name按包名匹配支持通配符。比如Get-AppxPackage -Name *xbox*会匹配所有名字里带xbox的包。实测通配符匹配速度很快比先全量拉出来再Where-Object过滤更高效。-AllUsers查看系统里所有用户注册的应用包。默认不带这个参数时只看当前用户但一个应用可能被登记在每个用户的配置里用-AllUsers才能看全。-User 用户名指定查看某个特定用户的包。-PackageTypeFilter按包类型过滤可填Main、Bundle、Framework等。框架包是别的应用依赖的底层包不建议乱删。另外还有一个经常被忽略的姊妹命令Get-AppxProvisionedPackage -Online它查的是当前Windows映像里预配的应用包。区别在哪普通应用被卸载后只对当前用户生效如果包还在系统预配里新建一个用户登录后系统会重新安装它。这就是为什么很多人卸了Xbox注册新账号后又出现了。第3节我会专门讲怎么处理这层关系。2.2 Remove-AppxPackage卸载时要注意权限和数据保留卸载命令的核心用法就一行Get-AppxPackage *xbox* | Remove-AppxPackage管道把枚举结果直接喂给卸载命令这是最标准、最不容易出错的写法。Remove-AppxPackage本身能识别的参数有-Package接收包名或者PackageFullName字符串管道传参时系统会自动绑定。-PreserveApplicationData卸载应用但保留应用数据。如果你只是打算重装调试不想丢掉应用里的登录状态可以加上这个参数。-AllUsers从所有用户配置里移除该应用包。不加这个参数时通常只会操作当前用户的注册记录。-Volume指定应用所在的存储卷比如扩展的存储卡或额外硬盘分区。卸载时报错最常见的原因是权限不足。预装应用大部分是系统级Provisioned Package普通权限的PowerShell窗口执行Remove-AppxPackage会直接给你抛一个部署失败拒绝访问之类的错误。所以我在开头就强调打开PowerShell的时候右键选择以管理员身份运行。如果只是管理员身份还是卸不掉多半是包正在被使用先关掉这个应用的进程或者用-ForceApplicationShutdown参数强制结束再删。2.3 Add-AppxPackage靠它把应用装回来有删就有装。Add-AppxPackage主要承担两个任务从离线包文件安装新应用或者把系统里残留的应用重新注册。常见写法是Add-AppxPackage -Path C:\Downloads\Microsoft.WindowsStore.appx如果应用包还附带依赖包需要用-DependencyPath参数指定依赖包路径多个依赖用逗号隔开。还有一种常见场景应用的安装目录还在但注册信息丢了这时用注册模式把目录下的AppxManifest.xml重新注册一遍即可Add-AppxPackage -DisableDevelopmentMode -Register $($_.InstallLocation)\AppXManifest.xml这条命令我不会让你在没搞懂$_.InstallLocation之前就直接跑它的含义是针对枚举出来的每个应用包取它的InstallLocation属性拼接出Manifest文件路径再禁用开发模式注册。后面第4节会结合恢复场景再展开。3. 实操批量清理预装应用的最稳流程3.1 动手前先做两件事备份清单和创建还原点听我一句劝卸载预装应用这件事翻车概率不低。有时候你以为删的是个棋牌游戏结果它是个共享依赖包一删引发连锁反应。所以动手之前先花30秒做两件保命的事。第一件事导出当前所有应用包的清单存成CSV或者文本文件备用Get-AppxPackage | Export-Csv -Path D:\app-backup.csv -NoTypeInformation Get-AppxPackage | Select-Object Name, PackageFullName | Out-File -FilePath D:\app-backup.txt第二件事创建系统还原点。按下Win键输入创建还原点进入系统属性界面选择系统盘然后点创建。这个操作花费一两分钟但能让你在误删之后一键回到正常状态。有些第三方精简工具和优化软件也是先调用PowerShell删应用区别在于它们不会替你做备份——出了问题它们的售后可不会帮你解决。3.2 单应用卸载示例以Xbox全家桶为例先来一个具体的操作演示就拿Xbox全家桶开刀。在管理员PowerShell里执行Get-AppxPackage *xbox* | Select-Object Name, PackageFullName你会看到Microsoft.XboxApp、Microsoft.XboxGamingOverlay、Microsoft.XboxIdentityProvider等一系列包。确认清单无问题后执行Get-AppxPackage *xbox* | Remove-AppxPackage是不是很简单但这里有个细节有些包比如XboxGameCallableUI是加上这行命令后依然提示删除失败。遇到这种情况先检查是不是有相关进程在运行——右下角Xbox Game Bar、游戏录制进程都会占用。可以先用Get-Process *xbox*看看有没有正在跑的进程有的话Stop-Process一下再回头卸。3.3 按名单批量卸载我的可删清单参考单条命令反复敲太慢适合批量操作的方式是维护一个名单用循环跑。下面是我在几台办公机上实测过多次的脚本模板$appList ( Microsoft.BingNews, Microsoft.BingWeather, Microsoft.MicrosoftSolitaireCollection, Microsoft.People, Microsoft.WindowsFeedbackHub, Microsoft.XboxApp, Microsoft.XboxGamingOverlay, Microsoft.YourPhone, Microsoft.ZuneMusic, Microsoft.ZuneVideo ) foreach ($app in $appList) { Write-Host 正在尝试移除$app Get-AppxPackage -Name $app* | Remove-AppxPackage -ErrorAction SilentlyContinue }这个脚本对小白比较友好每删一个会打印一行提示删不掉的也不会直接中断报错。但我要强调一个原则这份清单不是通用答案。每个人的系统版本、用途不同你的电脑上如果正在用你的手机来传文件删掉之后哭都来不及。下面给了一张常见应用的风险等级表对照你自己的情况判断应用名PackageName关键词风险等级说明必应新闻Microsoft.BingNews低国内无法使用必应天气Microsoft.BingWeather低有替代方案纸牌合集Microsoft.MicrosoftSolitaireCollection低纯游戏人脉Microsoft.People低极少使用反馈中心Microsoft.WindowsFeedbackHub中部分系统设置项依赖Xbox系列Microsoft.Xbox*中与游戏录制、手柄驱动相关你的手机Microsoft.YourPhone中与手机联动用到照片Microsoft.Windows.Photos高系统默认图片查看器计算器Microsoft.WindowsCalculator高轻量且好用不建议删商店Microsoft.WindowsStore高后续安装应用都靠它3.4 预配包让应用不要死灰复燃前面提到过如果你只是Remove-AppxPackage系统的预配层里还留着这个包新用户一登录就会重新装回来。要彻底清理得先查预配包再用对应的命令移除Get-AppxProvisionedPackage -Online | Select-Object PackageName # 移除指定预配包 Remove-AppxProvisionedPackage -Online -PackageName Microsoft.XboxApp*实际操作中有个坑Remove-AppxProvisionedPackage要求填写完整的PackageName版本号和PublisherId一个都不能少。所以我习惯先查出来复制再粘到命令里而不是手打。另外改预配包的操作是系统级别的影响的是这台机器上所有账户动手前一定要确认它真的不被任何账户需要。4. 误删了怎么救恢复系统的两条正经路径4.1 用内置命令重注册所有系统应用删过头了怎么办别慌Windows留了一条官方后路——把内置应用挨个重新注册。在管理员PowerShell里执行Get-AppxPackage -AllUsers | ForEach-Object { Add-AppxPackage -DisableDevelopmentMode -Register $($_.InstallLocation)\AppXManifest.xml -ErrorAction Continue }这条命令的思路是先枚举所有用户的全部应用包拿到每个包的安装路径然后用注册模式重建应用在系统里的注册关系。只要你没把安装目录里的文件删干净正常情况下卸载不会删目录里其他应用的文件大部分应用都能靠这个方式复活。但我得提醒你它不是万能的有些已经被从预配层移除的应用注册后应用会回到开始菜单但无法正常打开因为底层的AppxManifest和系统组件已经不匹配了。这时候需要走第二条路。4.2 商店重装和离线包定向恢复对于误删的商店应用最干净的恢复方式是直接去微软商店重新下载。打开Microsoft Store搜索应用名点获取或安装系统会自动处理依赖和注册。这个方法唯一的限制是如果你连商店本身都删了那就得先解决商店的安装问题。商店没了、网络又不方便的情况下可以下载离线包来装。我一般用第三方在线商店包提取服务把商店网页版的应用详情页链接贴进去就能提取出.appx、.msix或.appxbundle格式的安装文件。拿到文件后在PowerShell里执行Add-AppxPackage -Path C:\Downloads\Microsoft.WindowsStore.msixbundle -DependencyPath C:\Downloads\Microsoft.VCLibs.140.00.UWPDesktop.appx,C:\Downloads\Microsoft.UI.Xaml.appx依赖包怎么选一般来说提取页面会列出这个应用需要的所有依赖比如VC运行库、UI框架等。把它们都下载下来用-DependencyPath一次性指定安装就不会缺这缺那了。装之前如果遇到开发者模式的提示通常是因为未签名的包需要启用开发人员模式这种情况下可以在设置更新和安全开发者选项里开启。5. 挨过打的才知道执行策略与错误代码排错记录5.1 Set-ExecutionPolicy那些事很多第一次用PowerShell的人会卡在禁止运行脚本这个报错上。这个问题的根源是PowerShell默认的执行策略限制只允许运行系统签名的脚本。命令行敲命令不受影响但一旦把多个命令存成.ps1文件再运行就会看到红字报错。解决方法是修改执行策略常见用法Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUserRemoteSigned表示本地创建的脚本可以运行从网上下载的脚本必须有受信任的签名。如果是在公司域环境里域策略可能会覆盖本机设置这时你改完再执行Get-ExecutionPolicy会发现还是受限的原因就在这里。-Scope CurrentUser只在当前账户生效不需要管理员权限如果要全局改则加管理员权限并去掉Scope参数。有时候你会看到提示Windows PowerShell已成功更新你的执行策略但在更具体的作用域中定义的设置将覆盖此设置这就是上面说的域策略覆盖问题。这种情况下要么联系管理员放行要么用-Scope LocalMachine提高优先级但后者在域环境中可能依然被域策略压制。5.2 错误代码-2146869246的排查过程热搜里有个错误代码我特地单独拿出来讲安装程序无法安装 windows powershell。错误代码为 -2146869246。这个负数换算成十六进制是0x80070002对应系统错误找不到指定的文件。在Win10应用管理场景里它经常出现在你执行Add-AppxPackage或者试图重注册某个应用时原因大多不是PowerShell命令本身写错了而是安装包路径下缺少关键文件。我在一台精简版Win10上遇到过同样的问题当时想装回照片应用命令怎么跑都报这个错。完整的排查链路是这样的先检查安装包路径是否存在Test-Path C:\Downloads\Microsoft.Windows.Photos.appx如果输出False说明文件没放对地方。再检查安装目录下Manifest是否存在Test-Path C:\Program Files\WindowsApps\Microsoft.Windows.Photos*\AppXManifest.xml。结果发现这个目录里根本没有照片应用的文件夹说明之前被深度清理过。用DISM命令修复系统映像DISM /Online /Cleanup-Image /RestoreHealth sfc /scannow跑完再检查WindowsApps目录的完整性。最后重新用第4节的离线包方式安装。如果你的错误代码是-2146869246但出现在安装PowerShell本身的时候那大概率是安装程序需要的Windows组件文件缺失同一个排查思路也适用——先补系统组件再去装别再傻乎乎重复双击安装包。5.3 常见错误代码速查表我把实际使用中比较容易遇到的几个Appx相关错误整理成了下表方便你快速对照错误代码十六进制常见原因处理建议-21468692460x80070002找不到指定文件检查路径和文件是否存在修复系统组件-21470092780x80073CFA部署包不受信任或损坏重新下载安装包检查证书-21470092760x80073CFC无法注册同名包版本更高先卸载已存在的旧版本-21470092810x80073D01包与当前架构不匹配下载对应x64/x86架构的包-21470092820x80073D02部署被策略阻止检查组策略或企业部署设置遇到这些错误第一步永远是看清楚它发生在枚举阶段还是部署阶段。枚举阶段报错大多是PowerShell模块问题部署阶段报错才是包和系统的问题对症下药才不会白折腾。6. 进阶把妙招用到系统优化和离线部署上6.1 LTSC和旧版Win10上的特殊用法不少人折腾PowerShell删应用是为了优化Win10 LTSC或配置较弱的旧机器。LTSC版本本身已经砍掉了大部分商店应用但不代表没有问题——有些LTSC用户想要商店有些又想进一步关掉后台无用任务。对于想给老机器减负的人我建议在做完第3节的清理之后再配合关闭后台应用在设置隐私后台应用里关掉允许后台运行的开关或者用注册表整体关闭。这样下来内存占用和启动速度的改善会非常明显。我还在一些老机器上碰到过奇怪问题Win10 22H2的右键菜单用不惯、系统更新后样式变了有人想改回Win10传统右键菜单。这个操作和PowerShell删应用是两个独立话题但思路是一样的——系统各种配置在PowerShell和注册表里都有开关只不过风险等级不同改之前先备份。6.2 给应用换安装位置和离线部署新应用再说一个多数人不了解的进阶玩法把应用安装到非系统盘。Win10商店应用默认装C盘对系统盘空间紧张的用户不友好。在设置里可以给新应用改默认存储位置但对已经装好的应用用PowerShell处理更直接。先把要移动的应用包卸载但保留数据然后修改默认安装路径再重新安装。这个操作实际是卸载改存储位置重装三步所以隐藏的修改项是存储位置的设置而不是PowerShell参数。离线部署新应用也值得练一下。公司内网环境里想让一批机器预装某个内部开发的UWP应用或者统一安装一个不经过商店的应用流程就是在干净机器上把应用打包成.appx然后通过Add-AppxPackage推送到目标机器。大规模分发可以配SFB部署策略但在小规模环境直接用Invoke-Command加Add-AppxPackage就足够高效。我从第一次跑通到批量给几十台电脑装完只花了一下午还没有一台出问题。6.3 卸载安装之外还能用PowerShell做什么最后再聊点超越卸载和安装本身的内容。上文反复提过PowerShell对Appx包的管理能力本质上是对系统应用注册表的读改写。基于这一点你能做的不只是删和装批量导出别人电脑上的应用清单做软件合规审计把某台机器的应用包备份出来装到另一台离线的同类机器上应用闪退、图标丢失时用重注册命令修复比重置系统快得多在部署脚本里将本机不满足条件的应用先卸载再装对应版本实现目录应用的自动对齐。我自己在维护一批办公机时就把上面的清理、备份、重注册逻辑写成了一个带参数的脚本每次给新机器初始化系统就直接跑一遍。说实话这套流程帮我省下的时间比我当时研究PowerShell花的时间多得多。如果你只是想把自己的电脑收拾利索从上面任一条命令开始实践效果也一样。
返回列表