sublime text 调用 powershell 需正确配置构建系统:powershell.sublime-build 必须置于 packages/user/ 目录,含 "shell": true、"selector": "source.powershell"、"working_dir": "$file_path"、"cmd" 中 "$file" 用 "\"$file\"" 转义,并显式添加 -executionpolicy bypass;还需设置编码为 utf-8、绑定 .ps1 语法高亮。

Sublime Text 本身不执行 PowerShell 脚本,它只是调用 powershell.exe 或 pwsh.exe 去运行;所谓“高效调试”,核心是让输出可见、错误可定位、路径不崩、策略不拦——四者缺一不可。
PowerShell.sublime-build 必须放对位置且字段写全
构建系统不是“保存就生效”。它必须存放在 Packages/User/ 目录下(可通过 Preferences → Browse Packages… 打开),文件名必须是 PowerShell.sublime-build,且内容不能漏掉关键字段:
-
"shell": true—— 否则$file不会展开为绝对路径,中文或空格路径直接截断 -
"selector": "source.powershell"—— Sublime 只认这个作用域,右下角显示 “Plain Text” 或 “ShellScript” 都不会触发构建 -
"working_dir": "$file_path"—— 不设这个,脚本里写的.\config.json会去 Sublime 安装目录找,而不是你脚本所在目录 -
"cmd"中的$file必须用反斜杠转义双引号包裹:"\"$file\"",否则 JSON 解析失败,尤其在 Windows 下路径含空格时必报错
ExecutionPolicy Bypass 必须加在 cmd 里,不能省也不能改
Ctrl+B 报 “无法加载文件,因为在此系统中禁止运行脚本”,不是 Sublime 的问题,是 PowerShell 默认策略(Restricted)在拦截。绕过方式只有一种:把 -ExecutionPolicy Bypass 显式写进 cmd 数组里。
- 别信“全局改策略”的方案:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser在企业环境常被域策略覆盖,且不解决 Sublime 构建问题 - 别写成
-ExecutionPolicy RemoteSigned—— 它仍可能因签名缺失失败,Bypass是唯一可靠开发选项 - 如果用了 PowerShell 7+(即
pwsh.exe),就别硬写powershell.exe,否则报The system cannot find the file specified
中文乱码、输出一闪而过、Read-Host 失效的根源
输出面板中文变问号、脚本执行完窗口立刻关闭、末尾加 Read-Host 却卡死——这些问题都指向同一个底层机制:Sublime 的构建输出是单向管道,不支持交互式 stdin。
- 中文乱码:Windows 默认编码是
cp936(GBK),但 PowerShell 5.1 默认用 UTF-16 输出;建议构建配置中加"encoding": "UTF-8",并在脚本开头加[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 - 输出一闪而过:别用
Read-Host,它依赖终端回车,而 Sublime 输出面板不提供交互 stdin;调试阶段最稳的是$host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") - 想一劳永逸看结果?构建命令改用
cmd /c包一层:"cmd": ["cmd", "/c", "powershell.exe -ExecutionPolicy Bypass -NoProfile -File \"$file\" & pause"],注意双引号要转义
语法高亮和.ps1绑定不是自动的,两步缺一不可
打开 .ps1 文件全是灰色?右下角显示 “Plain Text”?这不是插件没装好,是 Sublime 根本没把文件当 PowerShell 处理。
- 先装插件:按
Ctrl+Shift+P→Package Control: Install Package→ 搜PowerShell(作者jbrooksuk),装完重启 - 再手动绑定:打开 .ps1 文件 → 点右下角语言名 →
PowerShell→PowerShell;这只是当前文件生效 - 永久绑定:按
Ctrl+Shift+P→Preferences: Settings – Syntax Specific→ 右侧加:{"extensions": ["ps1"]},或进Packages/User/新建PowerShell.sublime-settings写同一内容
最容易被忽略的是 shell: true 和 "\"$file\"" 的组合——它决定了路径是否能正确传给 PowerShell;一旦漏掉,哪怕语法高亮了、执行策略也绕过了,脚本照样找不到自己。











