Sublime Text 可通过自定义 Build System 运行 .ps1 脚本,核心是添加 -ExecutionPolicy Bypass 绕过策略限制,并确保 "shell": true 以展开 $file 变量。

Sublime Text 本身不内置 PowerShell 运行支持,但可以通过自定义 Build System 实现一键运行 .ps1 脚本——关键不是“配置编译环境”,而是绕过执行策略限制、正确调用 powershell.exe 并捕获输出。
为什么直接 Ctrl+B 会报错“无法加载文件,因为在此系统中禁止执行脚本”
这是 PowerShell 默认执行策略(ExecutionPolicy)阻止了本地脚本运行,和 Sublime 无关。即使你写了正确的构建配置,没解决策略问题,依然会卡在这一步。
-
Get-ExecutionPolicy在终端里执行,通常返回Restricted或RemoteSigned(后者对本地脚本仍可能拒绝) - 临时绕过:在构建命令中显式加
-ExecutionPolicy Bypass参数,不改系统策略,最安全 - 不建议全局执行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser,尤其在企业环境可能被组策略覆盖
如何创建能真正运行 PS1 的 Build System
路径:Tools → Build System → New Build System…,粘贴以下内容后保存为 Powershell.sublime-build(注意扩展名):
{
"cmd": ["powershell.exe", "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", "$file"],
"selector": "source.powershell",
"working_dir": "$file_path",
"shell": true,
"variants": [
{
"name": "Run with Args",
"cmd": ["powershell.exe", "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", "$file", "$args"]
}
]
}
-
-NoProfile:跳过用户配置文件,避免加载额外模块或报错 -
$file自动替换为当前打开的.ps1文件绝对路径 -
"shell": true是必须的,否则$file变量不展开 - 保存后,在右下角状态栏手动切换到
Powershell构建系统,再按Ctrl+B
如何让 .ps1 文件自动关联这个 Build System
仅靠文件扩展名不够,Sublime 需要知道语法高亮和构建绑定关系。你需要确保:
- 当前文件已用 PowerShell 语法着色:右下角点击语言名 → 选择
PowerShell(不是ShellScript) - 或者:打开
View → Syntax → Open all with current extension as… → PowerShell,这样所有.ps1文件默认用该语法 -
"selector": "source.powershell"就是依赖这个语法作用域,不匹配则Ctrl+B不触发该构建系统
常见失败现象和对应检查点
如果按下 Ctrl+B 后没反应、黑框一闪而过、或报路径错误,按顺序排查:
- 终端是否根本没弹出?→ 检查
"shell": true是否漏写;确认 Sublime 是否以管理员身份运行(非必需,但某些策略下会影响) - 报错
The term 'xxx.ps1' is not recognized→ 构建系统里用了-Command而非-File,或变量写成$file_path\$file_name(Windows 路径分隔符反斜杠在 JSON 里要转义,极易出错) - 中文路径乱码或脚本不执行 → 把
"encoding": "utf-8"加入构建配置(Sublime 4+ 默认支持,旧版需显式声明) - 想传参数但
$args不生效 → 必须使用Build With… → Run with Args变体,并在弹出框里输入参数(空格分隔,不要引号)
PowerShell 构建系统本质是 shell 命令封装,没有“编译”过程;真正复杂的是执行策略、路径变量展开、编码一致性这三处,其他都是标准 JSON 配置逻辑。










