答案是执行 powershell 默认 restricted 策略所致,需运行 set-executionpolicy remotesigned -scope currentuser 并关闭重建终端生效;终端类型错误或未刷新进程也会导致策略失效。

这是 PowerShell 默认执行策略在拦截,不是 VSCode 故障,也不是权限不足。根本不用重装、不用管理员身份启动 VSCode,只需改 CurrentUser 作用域的策略或换终端。
Get-ExecutionPolicy 返回 Restricted 就说明问题根源在这里
VSCode Windows 默认终端是 PowerShell,而它的默认策略就是 Restricted——连当前目录下的 .ps1、.py、npm.ps1、vue.ps1 都不许直接运行。这不是文件路径错、不是杀毒软件拦、也不是 npm 或 Python 本身有问题。
- 在 VSCode 终端里运行
Get-ExecutionPolicy -List,重点看CurrentUser那一行:如果是Undefined,实际继承自Restricted,照样报错 -
Get-ExecutionPolicy单独执行返回Restricted,就坐实了策略问题 - 错误信息里含
PSSecurityException或UnauthorizedAccess,100% 是 PowerShell 策略触发的
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 是最稳妥的解法
这条命令只改当前 Windows 用户的策略,不需管理员权限,不改系统全局设置,重启 VSCode 也不失效,微软官方推荐用于开发场景。
- 在 VSCode 终端里直接运行:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser - 必须带
-Scope CurrentUser,漏掉会要求管理员权限,且影响整个机器 - 执行后关掉当前终端标签页(不是“重新运行”,是彻底关闭),再按
Ctrl+Shift+`新开一个 - 新开终端里立刻跑
Get-ExecutionPolicy,确认返回RemoteSigned - 别用
Bypass或Unrestricted:前者单次有效但易被误用,后者绕过全部校验,生产环境风险高
终端右上角写着 PowerShell?那切换 Profile 更快
如果你只是想让 npm run dev、python script.py 这类命令跑起来,又不想动策略,切终端是最轻量的办法。
- 点终端右上角「+」旁的下拉箭头 → 选
Command Prompt或Git Bash,它们没有执行策略限制 - 要永久生效:按
Ctrl+Shift+P→ 输入Terminal: Select Default Profile→ 回车 → 选你要的 shell - 改完配置后,已打开的终端不会自动切换,必须关掉再新建一个才读新配置
- 注意:
python script.py能跑 ≠./script.py能跑——后者是 PowerShell 尝试“作为脚本执行”,前者是调用解释器,本质不同
路径含空格或中文时,&".\xxx.ps1" 才是正确写法
就算策略设对了,PowerShell 对路径依然敏感。直接敲 .\my script.ps1 会被拆成两个参数,报“找不到命令”;.\项目\启动.ps1 中文部分可能被截断。
- 必须同时满足两个条件:加引号 + 前置调用操作符
& - 正确写法:
&".\my script.ps1"、&"C:\项目\deploy.ps1" - 漏掉
&:PowerShell 把带空格的路径当命令名解析,直接失败 - 漏掉引号:中文或空格导致路径截断,报“找不到文件”
真正容易被忽略的是作用域和终端刷新这两个点:CurrentUser 没设对,或者终端没关干净重开,策略就等于没生效。其他所有操作都建立在这两个前提之上。











