vscode在windows终端执行.ps1脚本失败主因是powershell执行策略限制,默认restricted策略禁止运行本地脚本;应运行set-executionpolicy remotesigned -scope currentuser并重启终端,同时路径含空格或中文时须用&".path.ps1"格式。

VSCode 在 Windows 上终端执行脚本失败,绝大多数情况根本不是“权限不足”,而是 PowerShell 执行策略(ExecutionPolicy)在拦截——它连本地写的 .ps1 脚本都默认禁止运行,和文件系统权限、UAC、管理员身份完全无关。
PowerShell 执行策略被禁用(报错 “cannot be loaded because running scripts is disabled”)
这是最常见、最典型的场景。VSCode 默认终端是 PowerShell,而 Windows 桌面版默认策略为 Restricted,任何 .ps1 文件(包括 cnpm、npm 全局安装的脚本)都会被直接拒绝。
- 临时生效(推荐调试时用):在 VSCode 终端里直接运行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser,无需管理员权限,只影响当前登录用户 - 验证是否成功:运行
Get-ExecutionPolicy -Scope CurrentUser,应返回RemoteSigned - 必须新建终端:改完后按
Ctrl+Shift+`关闭当前终端,再重新打开一个,旧终端不会刷新策略 - 别用
Bypass或Unrestricted:前者等于关掉防护,后者在企业环境常被组策略强制覆盖回Restricted
VSCode 终端始终切不到 Git Bash / CMD(默认 Profile 配置失效)
你以为点了几下右上角下拉菜单就切成功了?其实 VSCode 不会自动保存这个选择。它只读配置项 terminal.integrated.defaultProfile.windows,不改配置,下次新开终端还是 PowerShell。
- 正确操作路径:
Ctrl+Shift+P→ 输入Terminal: Select Default Profile→ 回车 → 从列表选Git Bash或Command Prompt - 如果 Git Bash 不在列表里:说明 VSCode 没检测到
bash.exe,需手动在设置中添加terminal.integrated.profiles.windows,填入类似"C:\Program Files\Git\bin\bash.exe" - 改完必须关闭所有终端标签页(点垃圾桶图标),再
Ctrl+Shift+`新建,否则旧终端仍沿用旧配置 - Git Bash 的优势:不走 PowerShell 策略,
cnpm install、./build.sh直接跑,无额外配置
脚本路径含空格或中文,PowerShell 调用时报错 “The term 'xxx' is not recognized”
即使 ExecutionPolicy 已放开,PowerShell 对路径依然敏感:它不会自动加引号,也不会帮你补调用操作符。写 .my script.ps1 就会被拆成两个参数,直接报错。
- 正确写法必须同时满足两点:
&(调用操作符) +"双引号"(包裹完整路径) - 示例:
&".my script.ps1"、&"D:项目deploy.ps1" - 不加
&:PowerShell 把带空格的路径当命令名处理,报The term 'my' is not recognized - 不加引号:中文或空格被截断,实际执行的是
.my,后面部分丢失
为什么改了策略还报错?检查这三处叠加干扰
真实问题往往不是单点故障,而是多层限制同时生效。顺序排查比瞎试更高效:
- 先确认终端类型:运行
$PSVersionTable.PSVersion看是否真在 PowerShell 里;如果是 Git Bash,ExecutionPolicy根本不生效 - 再查策略范围:
Get-ExecutionPolicy -List,重点关注CurrentUser行;MachinePolicy或UserPolicy若被企业组策略设为Undefined,可能覆盖你的修改 - 最后看脚本本身:
.ps1文件是否被杀软(如 Windows Defender 勒索软件防护)静默拦截?临时关掉实时防护测试一次,比反复调策略更快定位
真正麻烦的从来不是某一条命令怎么写,而是你改了 ExecutionPolicy,又没关终端重开,又忘了路径要加引号,还恰好碰上 OneDrive 同步目录被勒索防护锁定——四层限制叠在一起,只改其中一层,问题照旧。











