踩坑实录:把 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 的版本和编码问题折磨,按上面的步骤走一遍,半小时应该能搞定。卡住了欢迎留言,我会尽量帮看。

相关推荐
csdn_aspnet12 小时前
如何从电脑主机拷东西到VWmare虚拟机
linux·运维·服务器·windows·vmware·虚拟机
Li Ming&1 天前
Windows Server 2019 操作系统《保姆级安装教程》
windows·信息与通信
陈天伟教授1 天前
Windows操作技巧 -03
windows
TechExplorer3651 天前
Windows 隐藏导航窗格【主文件夹】、【图库】、【OneDrive】
windows·onedrive
我一定会有钱1 天前
官网谷歌浏览器离线安装包一键下载
windows
易点云徐源1 天前
(已解决)Foxmail打开后2分钟左右崩溃
windows·foxmail
其实防守也摸鱼1 天前
每天一个知识点——RCE漏洞
运维·服务器·数据库·windows·安全·github·漏洞
江湖人称菠萝包1 天前
【Windows】《深入浅出Windows API程序设计:核心编程篇》笔记-Chapter6-动态链接库
windows·笔记
2601_962364971 天前
重装系统后,Windows Hello 为什么要重新录入人脸?
windows·安全·电脑
水饺编程1 天前
第5章,[Win32 章节] :在平面直角坐标系中描点
c语言·c++·windows·visual studio