踩坑实录:把 Windows 默认 PowerShell 换成 7.x 到底有多坑?一条龙解决指南

故事的开始:一个中文乱码引发的血案

事情是这样的------我在 Windows 终端里跑一段 Node.js 脚本,用管道传了一段中文进去,结果输出全是乱码。改编码、调参数、搜教程,折腾半天最后定位到一个根本问题:

我一直在用 Windows 自带的 PowerShell 5.1。

查了一圈资料,结论很明确:5.1 是 .NET Framework 时代的产物,UTF-8 支持稀烂,管道传中文给原生命令十次有八次出问题。而 PowerShell 7(pwsh.exe) 基于 .NET Core,UTF-8 原生支持、跨平台一致性更好,是当前 Windows 下"最稳"的选择。

OK,换。我以为十几分钟就能搞定,结果踩了一堆坑。这篇文章记录整个过程,希望能帮后来人少走弯路。


第一阶段:安装 PowerShell 7 ------ 丝滑开局

首先检查有没有装过:

powershell

复制代码
pwsh -v

提示找不到命令,那就装。Windows 现在有 winget 包管理器,一行搞定:

powershell

复制代码
winget install --id Microsoft.PowerShell --source winget

下载 328MB,安装一气呵成,没有任何报错。到这里我还觉得今天运气不错。

然而,坑才刚刚开始。


第二阶段:切换默认终端 ------ 这才哪到哪

装完之后,我以为打开 Windows Terminal 就会自动变成新版本。结果一执行:

powershell

复制代码
$PSVersionTable.PSVersion

text

复制代码
Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      22621  6133

还是 5.1。

我知道要改默认配置,于是打开 Windows Terminal 的设置(Ctrl + ,),在配置文件下拉菜单里找 PowerShell 7。

下拉菜单长这样:

text

复制代码
Windows PowerShell
命令提示符
Azure Cloud Shell
Developer Command Prompt for VS 2022
Developer PowerShell for VS 2022
Visual Studio Debug Console
Anaconda PowerShell Prompt (anaconda3)
Anaconda Prompt (anaconda3)
Git Bash
……

没有 PowerShell 7。


第三阶段:手动添加配置文件 ------ 继续踩坑

网上教程教我用 JSON 添加。我在设置页面左下角点了"打开 JSON 文件",结果------

打开的是一片空白。

不是玩笑,真就是一片白。没有 profiles,没有 list,没有任何 JSON 结构。后来我才知道,如果你从来没手动编辑过 Windows Terminal 的 JSON 设置,它默认打开的可能是一个几乎没有内容的文件。

行,放弃 JSON,走图形界面。

切回设置页面,左边菜单找到 添加新配置文件新建空配置文件,出现一个表单。教程告诉我填:

字段 内容
名称 PowerShell 7
命令行 C:\Program Files\PowerShell\7\pwsh.exe
启动目录 %USERPROFILE%

填完保存,信心满满地把默认配置改成这个。

结果------启动报错,找不到 pwsh.exe。


第四阶段:路径去哪了?------ 今日最坑

我在终端里执行 where.exe pwsh,找到了实际路径:

text

复制代码
C:\Users\a1\AppData\Local\Microsoft\WindowsApps\Microsoft.PowerShell_8wekyb3d8bbwe\pwsh.exe

我当时的心情可以用一句话概括:

"尼玛,这位置这么奇怪?!"

winget 安装的 PowerShell 7,路径竟然不在 C:\Program Files\PowerShell\7\,而是藏在了 AppData\Local\Microsoft\WindowsApps\ 下一个带随机哈希的文件夹里。

这就是为什么很多教程里写的标准路径不生效------因为 winget 安装的实际路径不一样。

我把表单里的命令行改成了实际路径,保存。再次启动 Windows Terminal。

text

复制代码
PowerShell 7.6.1

终于进去了。


第五阶段:配 UTF-8、改 VS Code、收尾

1. 写入 UTF-8 Profile

在 pwsh 里执行:

powershell

复制代码
$dir = Split-Path $PROFILE -Parent
if (!(Test-Path $dir)) { New-Item -ItemType Directory -Path $dir -Force }

@'
$utf8 = [System.Text.UTF8Encoding]::new($false)
[Console]::InputEncoding = $utf8
[Console]::OutputEncoding = $utf8
$OutputEncoding = $utf8
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
$PSDefaultParameterValues['Set-Content:Encoding'] = 'utf8'
$PSDefaultParameterValues['Add-Content:Encoding'] = 'utf8'
$env:PYTHONUTF8 = '1'
$env:PYTHONIOENCODING = 'utf-8'
'@ | Out-File -FilePath $PROFILE -Encoding utf8

. $PROFILE

2. 改 VS Code 默认终端

  • Ctrl + Shift + PTerminal: Select Default Profile → 选 PowerShell 7

3. 验证

powershell

复制代码
$PSVersionTable.PSVersion   # Major 7
$OutputEncoding.WebName     # utf-8
[Console]::InputEncoding.WebName   # utf-8
[Console]::OutputEncoding.WebName  # utf-8

全部通过。


踩坑总结:避坑清单

原因 解决方法
装完还是 5.1 需要手动改默认终端 Windows Terminal 设置里改默认配置文件
下拉菜单没有 PowerShell 7 winget 不会自动注册 profile 手动添加新配置文件
打开 JSON 文件是空白的 没手动编辑过就不会自动生成完整结构 直接走图形界面添加
C:\Program Files\PowerShell\7\ 不存在 winget 安装路径在 AppData 下 where.exe pwsh 查真实路径

最终方案:照着做,半小时搞定

  1. 安装 PowerShell 7

    powershell

    复制代码
    winget install --id Microsoft.PowerShell --source winget
  2. 查找真实路径

    powershell

    复制代码
    where.exe pwsh
  3. Windows Terminal 添加新配置文件

    字段 内容(把路径换成你查到的)
    名称 PowerShell 7
    命令行 你的实际 pwsh.exe 路径
    启动目录 %USERPROFILE%
  4. 设为默认 → 启动 → 默认配置文件 → 选 PowerShell 7

  5. 写入 UTF-8 Profile(代码见上)

  6. VS Code 终端也改(代码见上)

  7. 验证四命令全部绿(代码见上)


最后说两句

这趟折腾下来,最深的体会是:Windows 下的开发环境配置,坑永远在"路径"和"默认值"这两个环节。

winget 是个好东西,但它的安装路径跟传统教程对不上;Windows Terminal 的 JSON 配置对新用户也不够友好。希望这篇文章能帮你绕过我今天踩的这些坑。

如果你也正在被 PowerShell 的版本和编码问题折磨,按上面的步骤走一遍,半小时应该能搞定。卡住了欢迎留言,我会尽量帮看。

相关推荐
夜猫逐梦1 小时前
[开发经验] DLL注入中控制台窗口无法关闭的排查与修复
c++·windows·控制台
无限进步_1 小时前
C++ 多态机制完全解析:从虚函数重写到动态绑定原理
java·c语言·jvm·数据结构·c++·windows·后端
天都3572 小时前
青少年ctf 日志排查 复盘
windows·网络安全·应急响应
油炸自行车3 小时前
【Qt bug排查】Qt项目debug模式下,关闭可视化界面后,后台程序不退出,依然在打印log
bug
南汁bbj5 小时前
彻底解决!Milvus远程连接报错code=2、gRPC超时问题(Windows访问Linux服务终极方案)
linux·windows·milvus
草履虫君7 小时前
windows系统装机,小白win10装机教程wepe模式,包括系统盘怎么制作,bios怎么设置
windows·经验分享
minxihou7 小时前
迅雷下载导致 Windows 11 频繁卡死?一根 SATA 线的锅
windows·磁盘
我不是立达刘宁宇8 小时前
windows信息收集
windows·安全
水饺编程9 小时前
第5章,[标签 Win32] :设备的尺寸(三)
c语言·c++·windows·visual studio