PowerShell执行策略默认禁止.ps1脚本运行,导致红色警告;推荐使用Set-ExecutionPolicy RemoteSigned -Scope CurrentUser放宽当前用户策略,兼顾安全与可用性。

当你在PowerShell中执行npm、conda或自定义.ps1脚本时,屏幕突然弹出全屏红色警告窗口,内容是“无法加载文件……因为在此系统上禁止运行脚本”,这不是病毒拦截,也不是系统崩溃,而是PowerShell执行策略(Execution Policy)触发的强制安全提示——它默认把所有.ps1脚本当作潜在风险对象,连本地刚写的HelloWorld.ps1都会被拦。
确认当前执行策略状态
以管理员身份启动Windows PowerShell(右键开始菜单→Windows PowerShell(管理员)),输入:
Get-ExecutionPolicy -List
你会看到五列作用域(MachinePolicy、UserPolicy、Process、CurrentUser、LocalMachine)及其对应策略值。重点看CurrentUser和LocalMachine两行——如果它们显示为Restricted或AllSigned,就是红色弹窗的直接原因。
方法一:仅对当前用户放宽策略(推荐)
这一步操作起来很简单,直接在管理员PowerShell中执行:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
RemoteSigned意味着:本地创建的.ps1脚本能直接运行;从互联网下载的.ps1必须带有效数字签名才可运行。它平衡了安全性与实用性,不会影响其他用户,也不需要重启终端。执行后系统会提示“是否更改执行策略”,输入Y回车即可生效。
方法二:绕过本次执行(临时应急)
如果你只是想立刻跑通某一个脚本,又不想改任何策略,就用这个命令:
powershell -ExecutionPolicy Bypass -File "C:\path\to\your\script.ps1"
注意:Bypass模式只对本次命令生效,不修改系统设置,但【不能用于自动化任务或定时脚本】,因为每次调用都得手动加参数,且绕过策略本身会削弱防护边界。
方法三:禁用SmartScreen对PowerShell脚本的二次拦截
有些情况下,即使执行策略已设为RemoteSigned,Windows SmartScreen仍会对首次运行的.ps1弹出全屏警告。这时需手动解除文件的“Internet区域”标记:
右键目标.ps1文件→属性→勾选底部“解除锁定”→应用→确定。
这步删的是NTFS扩展流Zone.Identifier,不是改注册表也不是关杀毒软件。若文件是从压缩包解压出来的,要对解压后的.ps1单独操作,压缩包本身的“解除锁定”不会传递给内部文件。
验证是否生效
① 关闭当前PowerShell窗口,重新打开一个新的非管理员PowerShell窗口。
② 输入:
Get-ExecutionPolicy
确认返回值为RemoteSigned。
③ 尝试运行一个本地.ps1脚本,比如写一行Write-Host "OK"保存为test.ps1,然后执行.如果不再弹红框,而是直接输出OK,说明已成功关闭全屏红色警告窗口。

















