答案:sublime text 通过自定义 build system 调用 powershell.exe 或 pwsh.exe 运行 .ps1 脚本,核心是添加 -executionpolicy bypass 绕过策略限制、设置 "shell": true 展开 $file、确保语法高亮为 powershell 并将构建文件存于 packages/user/ 目录。

Sublime Text 本身不执行 PowerShell 脚本,它只是调用 powershell.exe 或 pwsh.exe 去运行;配置失败的主因从来不是 Sublime,而是构建命令没绕过执行策略、路径没转义、语法没绑定或编码不匹配。
为什么 Ctrl+B 后提示“无法加载文件,因为在此系统中禁止运行脚本”
这是 PowerShell 的 ExecutionPolicy 在拦截,和 Sublime 无关。Windows 默认是 Restricted,本地 .ps1 文件直接被拒。
-
-ExecutionPolicy Bypass必须加在cmd数组里,不能省略,也不能写成-ExecutionPolicy RemoteSigned(后者仍可能失败) - 别在 PowerShell 终端里全局改策略——
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser容易被域策略覆盖,且不解决 Sublime 构建问题 - 如果你装的是 PowerShell 7+(即
pwsh.exe),就别硬写powershell.exe,否则报The system cannot find the file specified
PowerShell.sublime-build 文件必须放对位置、写对字段
构建系统不是“保存了就能用”,它依赖三个硬性条件:路径、JSON 结构、作用域匹配。
- 文件必须保存在
Packages/User/目录下(可通过Preferences → Browse Packages…打开),不能放在桌面或任意子文件夹 -
"shell": true是必需的,否则$file变量不会展开为绝对路径,尤其在中文或空格路径下必崩 -
"selector": "source.powershell"表示:只有当前文件语法设为 PowerShell 时,这个构建系统才生效;右下角显示 “Plain Text” 或 “ShellScript” 都不触发 - 完整推荐配置(适配 Windows PowerShell 5.1):
{
"cmd": ["powershell.exe", "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", ""$file""],
"shell": true,
"working_dir": "$file_path",
"selector": "source.powershell",
"file_regex": "^.*?line (\d+).*?$",
"encoding": "UTF-8"
}
注意:"$file" 外层双引号必须用反斜杠转义(""$file""),这是 JSON 规范要求,否则含空格路径如 C:My Scripts est.ps1 会被截断为 C:My。
如何让 .ps1 文件自动高亮并绑定 PowerShell 构建系统
Sublime 不会根据 .ps1 后缀自动识别语法,也不会自动选构建系统——这两步都得手动做,缺一不可。
- 先装插件:按
Ctrl+Shift+P→ 输入Package Control: Install Package→ 搜索安装PowerShell(作者 jbrooksuk),别装已停更的PowerShell_Sublime - 再设语法:打开一个
.ps1文件 → 点右下角语言名(如 “Plain Text”)→ 选PowerShell;或按Ctrl+Shift+P→Set Syntax: PowerShell - 如果希望所有
.ps1文件默认用该语法,可在Packages/User/下新建PowerShell.sublime-settings,内容为:{"extensions": ["ps1", "psm1", "psd1"]} - 最后确认构建系统已启用:菜单
Tools → Build System→ 选中你刚保存的PowerShell
中文乱码、窗口一闪而过、交互式脚本卡死怎么办
这些不是“脚本有问题”,而是输出流、编码或终端生命周期没控住。
- 中文乱码:确保脚本文件本身是
UTF-8编码(Sublime 右下角看,不是UTF-8 with BOM),且构建配置里"encoding": "UTF-8";cp936仅在老旧环境临时可用,但跨平台/WSL 下失效 - 窗口一闪而过:PowerShell 进程执行完就退出,看不到输出。在脚本末尾加
[Console]::ReadKey() | Out-Null,或改用cmd /c powershell.exe -ExecutionPolicy Bypass -File "$file" & pause(需把cmd放进cmd字段) - 交互式脚本(含
Read-Host)在 Sublime 底部面板无法输入——这是 Sublime 构建系统的固有限制,它只捕获 stdout/stderr,不提供 stdin 交互通道;真要调试交互逻辑,请切到终端执行
最常被忽略的一点:PowerShell 构建系统里写的 powershell.exe 是命令名,不是路径;它依赖系统 PATH。若你在 Win11 ARM64 或自定义安装路径下,powershell.exe 可能根本不在 PATH 里,这时必须写绝对路径,比如 C:WindowsSystem32WindowsPowerShell1.0powershell.exe。











