powershell默认restricted策略会拦截.ps1和.py文件直接执行;需在vscode终端运行set-executionpolicy remotesigned -scope currentuser并新建终端,路径含空格时须用&".path.ps1"格式。

PowerShell 默认 Restricted 策略会直接拦截 .ps1 和 .py 文件执行
VSCode Windows 终端默认启动 PowerShell,而它的 ExecutionPolicy 默认是 Restricted——这意味着任何本地 .ps1、.py、.psm1 文件都无法被当作脚本直接运行,哪怕路径正确、权限正常。你看到的错误不是“找不到命令”,而是明确提示:cannot be loaded because running scripts is disabled on this system 或中文版 无法加载文件,因为在此系统上禁止运行脚本。这不是 Python、conda 或 npm 本身的问题,也不是杀毒软件或 UAC 拦截,纯粹是 PowerShell 的策略开关没打开。
改 CurrentUser 级策略最安全,别碰 LocalMachine 或管理员权限
在 VSCode 终端里运行这条命令就能解绑:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
它只影响当前登录用户,不需要管理员权限,且 RemoteSigned 允许本地脚本无签名运行,仅要求从网络下载的脚本必须带有效签名,兼顾安全与可用性。容易踩的坑包括:
- 误用
Unrestricted或Bypass:前者绕过所有检查,后者临时禁用策略但不持久,都增加风险 - 漏掉
-Scope CurrentUser:直接运行Set-ExecutionPolicy RemoteSigned会尝试改LocalMachine,普通用户无权写注册表,报错失败 - 改完不重启终端:旧终端不会刷新策略,必须关闭所有集成终端标签页(点垃圾桶图标),再按
Ctrl+Shift+`新建一个 - 验证是否生效:运行
Get-ExecutionPolicy -Scope CurrentUser,返回值必须是RemoteSigned
路径含空格或中文时,PowerShell 仍会报 “The term 'xxx' is not recognized”
即使策略已放开,PowerShell 对路径依然敏感。它不会自动加引号,也不会把带空格的路径当整体处理。比如写 .my script.ps1,PowerShell 会拆成两个参数 .my 和 script.ps1,然后报错 The term 'my' is not recognized。
必须同时满足两个条件:
- 用调用操作符
& - 用双引号包裹完整路径
正确写法示例:
&".my script.ps1" &"D:项目deploy.ps1"
漏掉 & 或漏掉引号,都会失败。注意:这不是 bug,是 PowerShell 的语法设计,和执行策略无关。
VSCode 终端默认 Profile 不等于你点过的那个下拉菜单选项
很多人以为在终端右上角下拉菜单选了 “Command Prompt” 就永久切换了,其实 VSCode 不保存这个选择。它每次新建终端,都读取配置项 terminal.integrated.defaultProfile.windows。如果该配置没改,下次新开终端还是 PowerShell。
真正生效的操作是:
- 按
Ctrl+Shift+P→ 输入Terminal: Select Default Profile→ 回车 → 选中目标终端(如Command Prompt或Git Bash) - 如果列表里没有 Git Bash,说明 VSCode 没检测到
bash.exe,需手动在设置中添加terminal.integrated.profiles.windows,填入类似"C:\Program Files\Git\bin\bash.exe" - 改完后,必须关闭所有已打开的终端面板,再新建一个,否则旧终端仍沿用旧配置
Git Bash 和 CMD 不走 PowerShell 执行策略,适合跑 ./build.sh、cnpm install 这类命令,但它们也不支持 Get-ChildItem 这类 PowerShell 命令。
python script.py 而非 ./script.py)这些细节漏掉任何一个,都可能让脚本卡在“看起来没问题,实际跑不通”的状态。











