直接修改CurrentUser作用域为RemoteSigned最稳妥:无需管理员权限,精准匹配开发需求,允许本地脚本执行且仅限制未签名远程脚本;修改后必须重启VSCode终端才能生效。

直接改 CurrentUser 作用域的执行策略为 RemoteSigned,不用管理员权限,VSCode重启终端后立即生效。 其他方案要么治标不治本(比如临时切终端),要么引入安全风险(比如设成 Unrestricted 或改 LocalMachine)。
为什么 Get-ExecutionPolicy 显示 Restricted 就会报错
PowerShell 默认策略是 Restricted,它连本地写的 .ps1 文件都不让加载——包括 venv\Scripts\activate.ps1、yarn.ps1、npm.ps1,甚至你自己新建的 hello.ps1。这不是权限不足,也不是杀毒软件拦截,而是 PowerShell 自带的安全机制在起作用。
- 报错典型格式:
无法加载文件 C:\path\script.ps1,因为在此系统上禁止运行脚本 - 只出现在 PowerShell /
pwsh终端里,cmd和Git Bash不触发 - VSCode 默认终端就是 PowerShell(尤其 Win10/11),哪怕你装了其他 shell,它也不会自动切换
-
Get-ExecutionPolicy返回Restricted是表象,真正要看的是Get-ExecutionPolicy -List中CurrentUser那一行
用 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 最稳妥
这个命令只改当前登录用户的策略,不需要管理员权限,且精准匹配开发场景:允许本地脚本(如虚拟环境激活、npm/yarn wrapper 脚本),仅对从网络下载、未签名的脚本做提示或拦截。
- 在 VSCode 终端里直接运行:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force - 别加
-Force的话,会卡在确认提示;加了就跳过交互,适合快速修复 - 改完必须关闭所有 VSCode 终端窗口,再新开一个——PowerShell 进程不重启,新策略不加载
- 不要用
LocalMachine:普通用户没权限,就算有也会影响全系统,还可能被组策略覆盖 - 别选
Bypass或Unrestricted:前者等于关掉所有检查,后者会让未签名远程脚本静默运行,开发环境没必要冒这个险
路径含空格或中文时,.\xxx.ps1 仍会失败
即使执行策略放开了,PowerShell 对路径里的空格和中文依然敏感。它不会自动加引号,也不会默认调用脚本,所以 .\my script.ps1 会被拆成两个参数,直接报“找不到命令”。
- 正确写法必须同时满足两点:
&操作符 + 双引号包裹路径 - 例如:
&".\my script.ps1"、&"C:\项目\启动.ps1" - 漏掉
&:PowerShell 把带空格的路径当命令名处理 - 漏掉引号:中文或空格被截断,路径解析失败
- 这个细节和执行策略无关,但常和它一起出现,容易误判为策略没生效
最易被忽略的是作用域和进程生命周期:VSCode 的 PowerShell 终端读的是 CurrentUser 策略,不是系统级的;而策略修改后不重启终端,等于没改。这两点卡住的人最多。


















