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

📅 发布时间:2026/7/11 10:23:45 👁️ 浏览次数:
踩坑实录:把 Windows 默认 PowerShell 换成 7.x 到底有多坑?一条龙解决指南
故事的开始一个中文乱码引发的血案事情是这样的——我在 Windows 终端里跑一段 Node.js 脚本用管道传了一段中文进去结果输出全是乱码。改编码、调参数、搜教程折腾半天最后定位到一个根本问题我一直在用 Windows 自带的 PowerShell 5.1。查了一圈资料结论很明确5.1 是 .NET Framework 时代的产物UTF-8 支持稀烂管道传中文给原生命令十次有八次出问题。而PowerShell 7pwsh.exe基于 .NET CoreUTF-8 原生支持、跨平台一致性更好是当前 Windows 下“最稳”的选择。OK换。我以为十几分钟就能搞定结果踩了一堆坑。这篇文章记录整个过程希望能帮后来人少走弯路。第一阶段安装 PowerShell 7 —— 丝滑开局首先检查有没有装过powershellpwsh -v提示找不到命令那就装。Windows 现在有 winget 包管理器一行搞定powershellwinget install --id Microsoft.PowerShell --source winget下载 328MB安装一气呵成没有任何报错。到这里我还觉得今天运气不错。然而坑才刚刚开始。第二阶段切换默认终端 —— 这才哪到哪装完之后我以为打开 Windows Terminal 就会自动变成新版本。结果一执行powershell$PSVersionTable.PSVersiontextMajor Minor Build Revision ----- ----- ----- -------- 5 1 22621 6133还是 5.1。我知道要改默认配置于是打开 Windows Terminal 的设置Ctrl ,在配置文件下拉菜单里找 PowerShell 7。下拉菜单长这样textWindows 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找到了实际路径textC:\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。textPowerShell 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 . $PROFILE2. 改 VS Code 默认终端Ctrl Shift P→Terminal: Select Default Profile→ 选PowerShell 73. 验证powershell$PSVersionTable.PSVersion # Major 7 $OutputEncoding.WebName # utf-8 [Console]::InputEncoding.WebName # utf-8 [Console]::OutputEncoding.WebName # utf-8全部通过。踩坑总结避坑清单坑原因解决方法装完还是 5.1需要手动改默认终端Windows Terminal 设置里改默认配置文件下拉菜单没有 PowerShell 7winget 不会自动注册 profile手动添加新配置文件打开 JSON 文件是空白的没手动编辑过就不会自动生成完整结构直接走图形界面添加C:\Program Files\PowerShell\7\不存在winget 安装路径在 AppData 下用where.exe pwsh查真实路径最终方案照着做半小时搞定安装 PowerShell 7powershellwinget install --id Microsoft.PowerShell --source winget查找真实路径powershellwhere.exe pwshWindows Terminal 添加新配置文件字段内容把路径换成你查到的名称PowerShell 7命令行你的实际 pwsh.exe 路径启动目录%USERPROFILE%设为默认→ 启动 → 默认配置文件 → 选 PowerShell 7写入 UTF-8 Profile代码见上VS Code 终端也改代码见上验证四命令全部绿代码见上最后说两句这趟折腾下来最深的体会是Windows 下的开发环境配置坑永远在“路径”和“默认值”这两个环节。winget 是个好东西但它的安装路径跟传统教程对不上Windows Terminal 的 JSON 配置对新用户也不够友好。希望这篇文章能帮你绕过我今天踩的这些坑。如果你也正在被 PowerShell 的版本和编码问题折磨按上面的步骤走一遍半小时应该能搞定。卡住了欢迎留言我会尽量帮看。