Sublime Text 通过构建系统调用系统 PowerShell 运行 .ps1 脚本,需同时满足三项核心条件:语法作用域为 source.powershell、构建命令含 -ExecutionPolicy Bypass、"shell": true 且 "$file" 正确转义;缺一即失败。

Sublime Text 本身不执行 PowerShell 脚本,它只调用系统里的 powershell.exe 或 pwsh.exe 去运行;配置失败的绝大多数情况,不是 JSON 写错,而是执行策略、路径展开、编码三者没对齐。
为什么 Ctrl+B 提示“无法加载文件,因为在此系统中禁止运行脚本”
这是 PowerShell 的 ExecutionPolicy 在拦截,和 Sublime 无关。默认策略(如 Restricted)会直接拒绝本地 .ps1 文件执行。
-
-ExecutionPolicy Bypass必须加在构建命令里,不能省——它是进程级临时绕过,不改系统策略,最安全 - 别信“全局改策略”的教程:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser在企业环境常被组策略覆盖,且没必要 - 如果用了
pwsh.exe(PowerShell 7+),就别硬写powershell.exe,路径不对会报The system cannot find the file specified
为什么 .ps1 文件打开后全是灰色、Ctrl+B 没反应
Sublime 不靠文件扩展名触发构建系统,而是靠右下角显示的语法作用域(syntax scope)。显示 “Plain Text” 或 “Shell Script” 都无效,必须是 source.powershell。
- 先装 PowerShell 插件:按
Ctrl+Shift+P→Package Control: Install Package→ 搜PowerShell(作者jbrooksuk),安装后重启 - 打开一个
.ps1文件,点右下角语言名 → 选PowerShell;或按Ctrl+Shift+P→Set Syntax: PowerShell - 若想永久绑定所有
.ps1文件,进Packages/User/新建PowerShell.sublime-settings,写入:{"extensions": ["ps1", "psm1", "psd1"]}
为什么构建后窗口一闪而逝、看不到错误堆栈
直接运行 -File 时,PowerShell 进程执行完立即退出,错误来不及看。这不是 Sublime 的 bug,是 PowerShell 行为本身。
- 调试时临时加一行:
$host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")(比Read-Host更可靠,不依赖回车) - 更干净的做法是改构建系统:用
cmd /c包一层再加& pause,但注意引号嵌套——推荐这个写法:"cmd": ["cmd", "/c", "powershell.exe -ExecutionPolicy Bypass -NoProfile -File \"$file\" & pause"]
-
"shell": true是必须项,否则$file不会展开成实际路径,尤其在 Windows 下会走 cmd 兼容层,导致Get-Process等命令输出乱码或失败
中文路径或含空格时执行失败?
当脚本路径含中文或空格(如 C:\My Scripts\test.ps1),仅靠 "shell": true 不够,$file 变量必须显式加引号包裹,否则 PowerShell 解析失败。
-
"cmd"字段中,"$file"必须写成"\"$file\""(JSON 字符串内需转义双引号) -
"working_dir": "$file_path"要显式设置,否则脚本里.\config.json这类相对引用会指向 Sublime 安装目录而非脚本所在目录 - 确保文件本身是 UTF-8 编码(不是 UTF-8 with BOM),右下角状态栏确认编码显示为
UTF-8;若中文输出乱码,可试"encoding": "cp936"(仅限旧版 Windows PowerShell)
真正卡住人的从来不是 JSON 语法,而是 source.powershell 作用域没生效、$file 没展开、-ExecutionPolicy Bypass 漏写了——这三者缺一不可,且顺序和引号细节不能错。


















