如何在 Windows 上卸载 PowerShell 7
卸载 PowerShell 7 不会动 Windows 自带的 Windows PowerShell 5.1,它跟着 Windows 一起装好,一直都在。脚本文件和放在项目文件夹之外的个人配置文件,卸载前先备份好。这份指南覆盖用微软发布的 arm64 MSI 安装包按机器安装的 PowerShell 7,也就是这次测试里 Microsoft.PowerShell winget 包装出来的那个。
先退出 PowerShell 7
关闭所有 pwsh 窗口,卸载前在任务管理器(Ctrl+Shift+Esc)里确认没有 pwsh.exe 还在。Windows 自带的 powershell.exe 是另一个程序,不受影响。
用自带的卸载器移除应用
打开「设置 › 应用 › 已安装的应用」,找到 PowerShell 7,选择卸载,或者运行:
winget uninstall --id Microsoft.PowerShell
数据分别在哪里
| 位置 | 里面是什么 | 如何处理 |
|---|---|---|
%LOCALAPPDATA%\Microsoft\PowerShell |
PowerShell 自己的模块分析缓存和启动配置数据 | 可以删,下次运行 PowerShell 会自己重新生成 |
检查结果
卸载完成后运行下面几条只读命令:
Get-Process pwsh -ErrorAction SilentlyContinue
winget list --id Microsoft.PowerShell
Test-Path "$env:ProgramFiles\PowerShell\7"
Test-Path "$env:LOCALAPPDATA\Microsoft\PowerShell"
Get-Process没有输出只表示未观察到匹配进程,被忽略的查询错误不能当作已经退出。列出进程,说明还有pwsh窗口或脚本在跑。winget list正常完成且没有匹配,才说明包记录已经没了;列出一行,说明卸载没完成。- 第一条
Test-Path返回False,说明程序目录已经没了;返回True,说明那里还有文件。 Test-Path "$env:LOCALAPPDATA\Microsoft\PowerShell"返回True,说明模块和启动缓存还在,重装的话 PowerShell 会自己补上,想从头开始自己删掉就行。
用 winget 安装时
winget uninstall 运行的是「设置 › 应用」用的同一个 MSI 卸载器,删的是同一批程序文件,它不会主动动 %LOCALAPPDATA%\Microsoft\PowerShell。新一点的 PowerShell 7 版本,winget 默认装的是 MSIX 包,不是这次测试用的 MSI,不管哪一种,winget uninstall 都会把它自己装的东西删掉。
Mole 会列出什么
对按机器安装的 MSI 版 PowerShell 7:
- 公共开始菜单快捷方式默认勾选。
- 这次安装没有登记程序目录,所以 Mole 对这款应用只显示厂商自己报的大小,没有图标,不是目录的实际大小。
HKLM\SOFTWARE\Microsoft\PowerShellCore这个机器级注册表键,和 PowerShell 自己的模块缓存%LOCALAPPDATA%\Microsoft\PowerShell,都不在列表里。- 安装器加进去的 PATH 记录由卸载器自己删掉,不需要 Mole 处理。
这次检查覆盖了什么
测试的是 PowerShell 7.6.6.0,arm64 MSI,机器范围。这次全选并移除了每一行,没有留下东西。没有测试:同时装另一个 PowerShell 7 版本,x64 版 MSI,winget 默认安装的新版 MSIX 包,以及 PowerShell 远程连接配置。
