答案是添加-ExecutionPolicy Bypass参数并确保shell:true、selector为source.powershell;因Windows默认Restricted策略拦截.ps1执行,Sublime仅调用powershell.exe,需在cmd中临时绕过策略、展开$file路径且绑定正确语法作用域。

Ctrl+B 报“无法加载文件,因为在此系统中禁止运行脚本”怎么办
这是 PowerShell 执行策略(ExecutionPolicy)拦截导致的,和 Sublime Text 无关。Windows 默认是 Restricted,本地 .ps1 文件直接被拒。
必须在构建命令里加 -ExecutionPolicy Bypass,不能省略,也不能换成 RemoteSigned——后者在某些域策略下仍会失败。
-
-NoProfile要加上,避免加载用户配置引发意外报错 - 别在 PowerShell 终端里全局改策略:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser容易被组策略覆盖,且不解决 Sublime 构建问题 - 如果你装的是 PowerShell 7+(即
pwsh.exe),就别硬写powershell.exe,否则报The system cannot find the file specified
PowerShell.sublime-build 文件放哪、怎么写才生效
文件名必须是 PowerShell.sublime-build,且只能存于 Packages/User/ 目录下(菜单 → Preferences → Browse Packages… 打开该路径)。
内容必须满足 JSON 语法,关键字段一个都不能少:
-
"shell": true是必需的,否则$file不会展开为绝对路径,中文或空格路径必崩 -
"selector": "source.powershell"表示:只有当前文件语法设为 PowerShell 时,这个构建系统才触发 -
"working_dir": "$file_path"显式设置工作目录,否则脚本里.config.json这类相对引用会指向 Sublime 安装目录 -
"cmd"中的"$file"必须用反斜杠转义双引号包裹:""$file"",否则路径含空格(如C:My Scripts est.ps1)会被截断
推荐配置(适配 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"
}
为什么 .ps1 文件打开后全是灰色、Ctrl+B 没反应
Sublime 不靠 .ps1 后缀自动识别语法,也不自动绑定构建系统——这两步都得手动做。
先确认右下角状态栏显示的是 PowerShell,不是 Plain Text 或 ShellScript:
- 按
Ctrl+Shift+P→ 输入Package Control: Install Package→ 搜索安装PowerShell插件(作者jbrooksuk) - 重启 Sublime,打开一个
.ps1文件,点右下角语言名 → 选PowerShell - 想永久生效:按
Ctrl+Shift+P→Set Syntax: PowerShell,或在Packages/User/下新建PowerShell.sublime-settings,写入{"extensions": ["ps1", "psm1", "psd1"]}
中文乱码、输出一闪而过、参数传不进去怎么调
默认编码不是 UTF-8,中文输出会乱;构建面板不保留终端状态,脚本跑完就消失;没传参时 $args 是空字符串,直接拼进 cmd 会出错。
- 把
"encoding": "UTF-8"加进构建配置,别用cp936——它只兼容旧版 GBK,遇到 emoji 或生僻字仍崩 - 脚本末尾加
Read-Host -Prompt "Press Enter to continue"最简单有效,比新开终端更稳 - 需要传参?用
variants定义子构建项:"cmd": ["powershell.exe", "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", ""$file"", "$args"],运行时按Ctrl+Shift+B选Run with Args,再输入参数(空格分隔)
最常被忽略的一点:所有配置依赖三者严格对齐——PowerShell 语法作用域、source.powershell selector、shell: true。缺一个,Ctrl+B 就静默失效,连错误都不报。


















