答案是powershell执行策略为restricted所致,需运行set-executionpolicy remotesigned -scope currentuser并关闭重建终端生效;切换默认终端或修正含空格路径需用&".path.ps1"格式。

VSCode内置终端执行脚本失败,90%不是文件权限或UAC问题,而是PowerShell执行策略在拦截——改Set-ExecutionPolicy比改PATH、切管理员模式、重装Node都更直接有效。
PowerShell报“xxx.ps1 cannot be loaded because running scripts is disabled”怎么解
这是Windows上最典型的终端卡点,错误本质是PowerShell默认策略为Restricted,连npm自己生成的封装脚本(如npm.ps1)都会被拦住。
- 先验证:在VSCode终端里运行
Get-ExecutionPolicy,输出Restricted就坐实问题 - 只改当前用户:运行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser,无需管理员权限 - 必须关掉所有终端tab再新建一个,旧终端不会刷新策略
- 验证生效:
Get-ExecutionPolicy -Scope CurrentUser应返回RemoteSigned - 别用
Bypass或Unrestricted,前者等于关防护,后者常被域策略强制覆盖
为什么改了默认终端还是打开PowerShell
VSCode不会记住你某次手动选的终端类型,每次新开终端都读配置项terminal.integrated.defaultProfile.windows,不是“继承上次选择”。
- 正确操作路径:
Ctrl+Shift+P→ 输入Terminal: Select Default Profile→ 回车 → 从列表选Command Prompt或Git Bash - 如果Git Bash不在列表里:需手动在
settings.json中添加terminal.integrated.profiles.windows,填入类似"C:\Program Files\Git\bin\bash.exe" - 改完必须关闭所有终端标签页(点垃圾桶图标),再
Ctrl+Shift+`新建,否则旧终端仍沿用旧配置 - Git Bash优势明显:不走PowerShell策略,
./build.sh、cnpm install直接跑,零额外配置
脚本路径含空格或中文,PowerShell调用就报错
即使执行策略已放开,PowerShell对路径依然敏感:它不会自动加引号,也不会补调用操作符。写my script.ps1会被拆成两个参数,直接报The term 'my' is not recognized。
- 必须用调用操作符
&+ 双引号包裹完整路径 - 示例:
&".my script.ps1"、&"D:项目deploy.ps1" - 路径里反斜杠要双写:
"C:\Program Files\nodejs;${env:PATH}",或者统一用正斜杠更安全:"C:/Program Files/nodejs;${env:PATH}" - 别指望PowerShell自动识别空格路径——它根本不会猜,必须显式告诉它这是个整体
环境变量没加载,command not found和执行策略无关
VSCode终端以非登录、非交互模式启动shell,不自动执行~/.zshrc或%USERPROFILE%DocumentsPowerShellMicrosoft.PowerShell_profile.ps1,这不是bug,是设计使然。
- 唯一绕过shell初始化的方式:用
terminal.integrated.env.*显式注入,比如terminal.integrated.env.windows - 务必用
${env:PATH}拼接,漏掉就会覆盖系统PATH,导致ls、cd都失效 - macOS/Linux用户注意:
~/.zshrc里有语法错误会导致终端一开就退出,表现为“空白终端” - 改完
settings.json后,必须关闭所有终端tab再新建,热重载不触发环境重载
真正容易被忽略的是:PowerShell策略改完后仍报错,大概率已脱离策略范畴——得回头检查WSL文件系统行为、launch.json里runtimeExecutable是否显式声明,或是脚本本身shebang写错、换行符是CRLF而非LF。











