PowerShell 5.1 乱码坑:iwr 管道 iex 为什么不行 📅 发布时间:2026/8/31 13:53:27 👁 浏览次数: 事故现场一行流在老机器上炸了上周帮隔壁科室装察元AI文档助手。对方机器是单位统一镜像的 Windows 10只带 Windows PowerShell 5.1。我图省事把在自己机器上跑熟的下载方式换成了网上流传的一行流iwr-useb https://gitee.com/cloudshd/chayuan-wps-releases/raw/master/scripts/install-wps-skill-chayuan.ps1|iex我自己的机器装了 PowerShell 7这条命令毫无问题。可在 5.1 上回车之后满屏乱码加一片红色 ParseError中文注释全成了锟斤拷脚本第一行就解析失败加载项和 MCP 服务一样都没装上。这篇就把这次排错拆开讲清楚顺便说说为什么官方安装命令要长成那副啰嗦的样子。根因一iwr 在 5.1 里默认按 GBK 解码Invoke-WebRequest 在 PowerShell 5.1 里遇到响应头没有显式声明 charset 的文本会按系统本地代码页解码字节流。简体中文系统的本地代码页是 GBK而安装脚本是 UTF-8 编码保存的两套编码对不上中文注释和提示立刻变乱码。PowerShell 7 修正了这个行为默认按 UTF-8 处理所以我机器上没事科室机器上炸了。同一个命令两个版本两种命运这是第一层坑。根因二UTF-8 的 BOM 被硬解成一个非法字符更隐蔽的是 BOM。脚本文件开头带 UTF-8 BOM也就是三个字节 EF BB BF。正确的解码器会把它识别为编码标记然后剥掉但按 GBK 硬解时这三个字节被拼成一个乱码字符留在脚本第一个位置。解析器在第一行行首遇到这个非法字符直接抛解析错误后面内容再正确也轮不到执行。这也是我看着脚本没几个中文怎么还是乱码的答案只要带 BOM5.1 加 iwr 这条路基本走不通。根因三iex 执行的 scriptblock 里没有 $PSScriptRoot第三层坑跟编码无关。iex 拿到的是一段脱离了文件上下文的 scriptblock脚本内部引用的 $PSScriptRoot 是空的。安装脚本要在自身所在目录解包资源、写日志路径逻辑依赖 $PSScriptRoot 展开一旦为空相对路径整体失效。就算侥幸绕过编码问题脚本也会在半路以一个莫名其妙的原因挂掉。正确姿势显式 UTF-8、去 BOM、手工建 scriptblock察元官方给的 Windows 安装命令把三层坑一次性处理掉了{[Net.ServicePointManager]::SecurityProtocol[Net.SecurityProtocolType]::Tls12;$wNew-ObjectNet.WebClient;$w.Encoding[Text.Encoding]::UTF8;$s$w.DownloadString(https://gitee.com/cloudshd/chayuan-wps-releases/raw/master/scripts/install-wps-skill-chayuan.ps1);if($s.Length-and$s[0]-eq[char]0xFEFF){$s$s.Substring(1)};([scriptblock]::Create($s))-Fetch}拆开看四步第一句强制 TLS 1.2因为 5.1 默认不开老系统访问 HTTPS 会先死在握手然后用 WebClient 下载并把 Encoding 显式设为 UTF-8绕开 iwr 的本地代码页默认接着判断首字符是不是 UFEFF是就 Substring 去掉 BOM最后用 [scriptblock]::Create 包一层再调用带上 -Fetch 参数。脚本本身走四步闭环装加载项到 jsaddons 目录并写 publish.xml、部署 chayuan-mcp 单文件二进制并注册开机自启写入 HKCU\Run、做四级体检、把技能文件投放给 Claude、Cursor、Codex全程无需 Node.js。怎么确认自己踩的是哪个坑排查只要两步先跑 $PSVersionTablePSVersion 一栏低于 6 就是 5.1 血统再把脚本下载下来看文件头前三个字节是 EF BB BF 的就带 BOM。两个条件凑齐iwr 管道 iex 必炸。顺带一提macOS 和 Linux 用户没有这个烦恼curl 管道 bash 不经过 PowerShell 的解码环节字节流原样进 shellcurl-fsSLhttps://gitee.com/cloudshd/chayuan-wps-releases/raw/master/scripts/install-wps-skill-chayuan.sh|bash-s----fetch装完怎么验证装完别急着用先打健康检查curl http://127.0.0.1:62588/healthz返回 online 说明本机 MCP 服务就绪而且它只监听 127.0.0.1不对外暴露。再记两笔版本账4.1.1 修掉了 -Fetch 临时解压目录退出不清理的问题此前每次安装会残留约 290MB4.1.2 让 sidecar 全面隐藏启动安装运行不再弹黑窗运行 Spike掉线也能自愈。给同事装机前把这些讲清楚能省掉不少这不会是病毒吧的灵魂拷问。不确定自己 PowerShell 版本的先跑 $PSVersionTable 看 PSVersion7 以上随意5.1 请老老实实用上面那条长命令。一行流不是不能写是得知道它在哪一层会断。谁需要关心这个坑三类人重点记单位信息科批量装机的同事镜像越老越容易撞上 5.1给自己那台常年不重装的旧笔记本装机的个人以及跨平台团队里负责 Windows 侧的成员。参数上再备忘两条-SkillOnly 只投放技能文件、不动加载项和服务适合给 Claude、Cursor、Codex 单独补技能-Version 4.1.2 指定版本安装回滚也靠它。官方把编码坑包在命令里处理好了普通用户不必懂原理但负责排错的你知道这口锅在哪比陪着反复重装省出一个小时。