Sublime Text 不能原生运行.ps1脚本,需配置构建系统调用powershell.exe或pwsh.exe,并设置-ExecutionPolicy Bypass绕过策略限制,同时安装PowerShell插件并手动绑定.ps1语法高亮,三者缺一不可。

Sublime Text 本身不执行 PowerShell,它只是调用你系统里已安装的 powershell.exe 或 pwsh.exe。能不能跑起来,取决于路径对不对、执行策略放没放行、编码和语法绑定有没有配好——不是“装个插件就完事”,而是三者必须同时对齐。
PowerShell.sublime-build 文件必须放对位置且内容精准
这个文件不能随便建在桌面或文档里,必须保存到 Packages/User/ 目录下(菜单 → Preferences → Browse Packages… 可直接打开)。内容稍有偏差就会静默失败,比如:
-
"shell": true是必须的,否则$file变量不会展开成实际路径,尤其在中文或空格路径下必崩 -
cmd中的powershell.exe要写绝对路径,比如C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe;如果装了 PowerShell 7+,就得换pwsh.exe并确认它在 PATH 里 -
"selector": "source.powershell"不是摆设——它只在当前文件语法被识别为 PowerShell 时才触发构建,否则 Ctrl+B 完全没反应 - 路径含空格或中文?
"$file"必须加双引号并转义:"\"$file\"",因为 JSON 字符串内引号要转义
为什么 .ps1 文件打开就是“Plain Text”?得手动绑语法高亮
Sublime 默认不认识 .ps1,也不会自动加载 PowerShell 语法。不解决这个,selector 就永远不匹配,构建系统形同虚设。
- 先装插件:Ctrl+Shift+P → Package Control: Install Package → 搜
PowerShell(作者jbrooksuk),别选年久失修的PowerShell_Sublime - 打开一个
.ps1文件,右下角点语言名(如 “Plain Text”)→ 选PowerShell→PowerShell - 想一劳永逸?在
Packages/User/PowerShell.sublime-settings里写:{"extensions": ["ps1", "psm1", "psd1"]}
执行报错“无法加载文件,因为在此系统中禁止运行脚本”
这不是 Sublime 的锅,是 PowerShell 的 ExecutionPolicy 在拦你。域环境、企业电脑常见 RemoteSigned 或 AllSigned,本地脚本默认被拒。
- 临时解法:构建命令里必须带
-ExecutionPolicy Bypass,这是最安全的做法,不改系统策略 - 别信网上教你在构建里写
Set-ExecutionPolicy——它需要管理员权限,Sublime 普通进程根本跑不动 - 如果脚本里有中文输出乱码,检查文件编码:Sublime 右下角应显示
UTF-8(不是UTF-8 with BOM),encoding字段可设为"UTF-8"或"cp936"(仅限简体中文 Windows)
脚本一闪而过看不到输出?别硬加 Read-Host
PowerShell 构建默认不保活窗口,执行完就关。加 Read-Host 看似简单,但会卡住整个构建流程,而且 Ctrl+B 后没法交互输入。
- 调试阶段更可靠的是在脚本末尾加:
$host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") > $null - 或者改构建命令,用
cmd /c包一层再& pause,但要注意引号嵌套:["cmd", "/c", "powershell.exe -ExecutionPolicy Bypass -File \"$file\" & pause"] - 真正该关注的是底部面板输出是否完整——如果连错误都没打出来,大概率是
file_regex没配对,导致 Sublime 捕获不到异常行号
最容易被忽略的其实是 working_dir 和相对路径引用。比如脚本里写了 .\config.json,但 working_dir 没设成 "$file_path",那它就会去 Sublime 安装目录下找,而不是脚本所在目录。

















