写在前面
中文圈里很多 Windows 用户解决 Claude Code 的 pwsh 适配问题,是在 CLAUDE.md 或全局 prompt 里塞约束 —— “请用 pwsh 不要用 cmd”、“输出 UTF-8”、“不要用反引号转义”。这套办法能用,但是 prompt 层的 workaround:每次启动消耗 token、模型还会忘、对长命令仍然抗不住引号嵌套。
其实 Anthropic 在工具层做了 native 方案,只是没怎么宣传 —— 一个叫 CLAUDE_CODE_USE_POWERSHELL_TOOL 的预览 flag。开了之后 pwsh 是一个独立工具,不再是 shell 字符串拼接。下面把它讲清楚。
CLAUDE_CODE_USE_POWERSHELL_TOOL=1 是什么
PowerShell 工具预览。开启后启动 Claude Code,终端 footer 会出现 Anthropic 的内置提示,说明这是它们的官方预览功能,不是社区魔改。
实际变化:
维度 默认(关) 开启后 调用方式pwsh -c "..." 包装
原生 pwsh 命令直接调用
中文输出
经常乱码(CP936 默认)
原生 UTF-8(pwsh 7)
引号嵌套
多层转义地狱
大幅减少
长命令
字符串拼接易出错
直接写脚本块
前提是装了 pwsh 7+(不是系统自带的 Windows PowerShell 5.1):
winget install Microsoft.PowerShell
收益最明显的场景
1. 中文项目
文件名带中文 + 内容带中文,默认包装层会把 UTF-8 转成 GBK 再转回来,乱码概率极高。开了之后稳定 UTF-8,再也不用看到 鏂囦欢 这种东西。
2. 带管道和脚本块的命令
跑这类命令:
Get-ChildItem -Recurse | Where-Object { $_.Length -gt 1MB } | Select-Object Name, Length
默认模式下 Claude 会反复试错引号 —— 先用单引号、报错、换双引号、再报错、最后加转义。开了 PowerShell tool 之后一次过,因为它直接把这段当成 pwsh 脚本块送进去,不再经过 shell 字符串拼接。
3. 多行操作
if/else、foreach、try/catch 这类多行结构,默认模式基本写不出来,开了之后 Claude 直接生成原生 pwsh 脚本块。
怎么开
放在 ~/.claude/settings.json:
{
"env": {
"CLAUDE_CODE_USE_POWERSHELL_TOOL": "1"
}
}
或者临时试一下,pwsh 里直接:
$env:CLAUDE_CODE_USE_POWERSHELL_TOOL=1
claude
启动后看终端 footer,如果有 PowerShell tool 相关提示就是生效了。
Windows + pwsh 7 用户加这一行收益就到手了,没什么折腾成本。如果你挖到过其他真正有用的 CLAUDE_CODE_* flag,欢迎在评论里贴出来。
2 个帖子 - 2 位参与者