推荐用sublime原生build system替代已停更的powershell_sublime插件:修改json配置,指定powershell.exe或pwsh.exe绝对路径,添加executionpolicy bypass、utf-8编码及错误行号正则匹配。

PowerShell Sublime 插件根本没在维护了
别折腾 PowerShell_Sublime 这个插件——它最后一次更新是 2016 年,不支持 PowerShell Core(v6+),也不兼容 Sublime Text 4。你配半天,Build System 里选它,点 Ctrl+B 却没反应,或者报错 The system cannot find the file specified,大概率就是这个原因。
- 它硬编码调用
powershell.exe,路径写死在shell.ps1里,Win11/ARM64 或自定义安装路径下直接失效 - 不识别
.ps1文件的 BOM 和编码(比如 UTF-8 with BOM),执行时可能乱码或报File not found - 没有 stderr 捕获逻辑,错误堆栈全吞掉,只显示“[Finished in Xs]”,你以为成功了,其实脚本早崩了
用 Sublime 原生 Build System 替代(推荐)
Sublime 自带的 Build System 完全能跑 .ps1,关键是路径、编码、权限三者对齐。不用装任何插件,改一个 JSON 就行。
- 菜单栏 → Tools → Build System → New Build System,粘贴以下内容并保存为
PowerShell.sublime-build -
cmd字段必须用绝对路径调用powershell.exe或powershell.exe(取决于你装的是 Windows PowerShell 还是 PowerShell 7+) -
file_regex加上能捕获 PowerShell 错误行号的正则,不然点错误跳不到对应行
{
"cmd": ["C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe", "-ExecutionPolicy", "Bypass", "-NoProfile", "-File", "$file"],
"file_regex": "^.*?line (\d+).*?$",
"selector": "source.powershell",
"encoding": "UTF-8"
}
注意:-ExecutionPolicy Bypass 是临时绕过策略限制,不是永久改系统策略;如果脚本含中文,确保文件本身是 UTF-8 编码(Sublime 右下角看,不是 UTF-8 with BOM)。
为什么执行时提示“无法加载文件,因为在此系统中禁止运行脚本”
这是 PowerShell 默认执行策略(ExecutionPolicy)在拦你,不是 Sublime 的问题。插件或 Build System 都没法绕过系统级限制,只能按需临时放宽。
- 检查当前策略:
Get-ExecutionPolicy -List,重点看MachinePolicy和CurrentUser行 - 个人开发机可设为
RemoteSigned:Set-ExecutionPolicy RemoteSigned -Scope CurrentUser - 千万别用
Unrestricted或Bypass设全局策略,安全风险大;Build System 里加-ExecutionPolicy Bypass是进程级临时生效,更安全 - 域环境受组策略锁定时,
Set-ExecutionPolicy会失败,这时只能联系管理员,或改用pwsh.exe(PowerShell 7+)配合独立策略
PowerShell 7+(pwsh.exe)和 Windows PowerShell 兼容性差异
如果你装了 PowerShell 7(pwsh.exe),别直接套用老教程里的路径。两者模块、命令别名、默认编码行为都不同,Build System 写错就静默失败。
- 路径:PowerShell 7 默认装在
C:\Program Files\PowerShell\7\pwsh.exe(x64)或C:\Program Files\PowerShell\7\pwsh.exe(ARM64) - 参数:
pwsh.exe不认-NoProfile外的某些旧参数,但-ExecutionPolicy仍有效 - 编码:PowerShell 7 默认用 UTF-8,Windows PowerShell 默认用系统 ANSI,混用会导致中文输出乱码;Build System 中显式指定
"encoding": "UTF-8"能覆盖 Sublime 解析行为 - 模块路径不同,
Import-Module找不到本地模块时,先确认$env:PSModulePath是否包含你的模块目录
复杂点在于:同一个 .ps1 文件,在 Windows PowerShell 里跑通,换 pwsh.exe 可能因 cmdlet 别名缺失(比如 curl)或 .NET 类型差异而报错——得看脚本实际依赖什么。










