别再盲目运行 `irm ... | iex` 了
很多开发者在安装工具时,习惯性地直接复制文档里的那行 PowerShell 命令。最典型的就是这种:

下一篇
GPT-4o/Claude 3.5:UI审美差真的是模型的问题吗? →
powershell -ExecutionPolicy Bypass -c "irm https://.../install.ps1 | iex"虽然很多官方项目(比如 Hugging Face CLI 或 Bun)都在用这种方式简化安装流程,但这种“下载即执行”的模式在安全审计中其实是个巨大的漏洞。拆解这个命令在干什么
这行代码的核心逻辑是:通过 Invoke-RestMethod (irm) 把远程脚本抓取到内存里,然后直接通过 Invoke-Expression (iex) 执行。
- -ExecutionPolicy Bypass:强行跳过 PowerShell 的执行策略检查。这意味着即便脚本没有数字签名,系统也不会弹窗警告,直接运行。
- irm (Invoke-RestMethod):从网络请求内容。
- | (管道符):把下载到的文本直接传给下一个指令。
- iex (Invoke-Expression):将接收到的文本当成代码执行。

最危险的点在于:整个过程不产生本地文件。脚本在内存中运行,你根本没有机会在执行前打开文件看看里面写了什么。如果你是用管理员权限打开的终端,这个脚本就拥有你电脑的最高权限。
为什么这很危险?
这种模式本质上是把信任完全交给了服务器。一旦项目被投毒(供应链攻击),后果不堪设想。
比如 TeamPCP 这种攻击组织,通过污染开发者常用的工具链,直接在安装脚本里植入后门。一个典型的实战案例是 LiteLLM(一个月下载量近亿的 AI 接口库),曾在短时间内分发过带有后门的更新,目标非常明确:窃取 LLM 供应商的 API Key、SSH 密钥和 Kubernetes 凭据。
避坑指南:更安全的安装流程
如果你对安全性有要求,建议放弃这种“一键安装”的快感,改用以下步骤:
1. 先下载,后检查:先用浏览器或 curl 把 .ps1 脚本下载到本地。
2. 审计代码:用 VS Code 或记事本打开脚本,搜索 net, http, registry, token 等关键词,确认它没有在偷偷上传你的环境变量。
3. 手动执行:确认无误后再在本地运行。
对于追求极致安全的场景,可以用 & 运算符代替 iex,或者直接在脚本中明确指定执行路径。总之,任何让你 Bypass 掉系统安全检查的命令,都值得多花一分钟去审视。
