【Bug已解决】OpenClaw 报错无法运行 .ps1 脚本:因为在此系统上禁止运行脚本 解决方案
【Bug已解决】OpenClaw 报错无法运行 .ps1 脚本:因为在此系统上禁止运行脚本 解决方案
1. 问题描述
在 Windows 上通过 npm 全局安装 OpenClaw 后,执行命令时(尤其是通过某些封装脚本或 npm 生成的 .ps1 包装文件调用)遇到这样的报错:
无法加载文件 C:\Users\<用户名>\AppData\Roaming\npm\openclaw.ps1,因为在此系统上禁止运行脚本。
有关详细信息,请参阅 https://go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
+ CategoryInfo : SecurityError: (:) [],PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
1.1 具体现象
- 命令提示符(CMD)里执行完全正常,PowerShell 里却报这个安全错误
- 换成公司配发的电脑(通常有更严格的安全策略)更容易复现
- 有些人发现自己之前能正常用,某次系统更新或安全策略调整后突然不能用了
- 报错信息明确提到"禁止运行脚本",但很多人第一反应会去检查安装是否有问题,而不是执行策略
这是 npm 全局安装的命令行工具在 Windows 上会同时生成 .cmd 和 .ps1 两种包装脚本,而 PowerShell 默认的脚本执行策略往往会拦截 .ps1 脚本的运行,这是一个和 OpenClaw 本身完全无关、但表现形式容易让人误判的经典 Windows 安全策略问题。

2. 原因分析
Windows PowerShell 出于安全考虑,默认的执行策略(Execution Policy)通常是 Restricted(完全禁止运行任何脚本)或者 AllSigned(只允许运行经过数字签名的脚本),这是为了防止恶意脚本未经用户确认就静默执行。
npm 在 Windows 上为全局命令生成的包装文件通常包含三种:
| 文件 | 用途 |
|---|---|
openclaw.cmd |
供 CMD(命令提示符)调用 |
openclaw.ps1 |
供 PowerShell 调用 |
openclaw(无后缀,Shebang 脚本) |
供 Git Bash / WSL 等类 Unix 环境调用 |
当你在 PowerShell 里直接输入 openclaw,PowerShell 会优先尝试执行对应的 .ps1 文件——而这一步,如果当前执行策略是 Restricted,就会被直接拦截,抛出上述的安全错误。
用一张流程图梳理判断逻辑:
PowerShell 中输入 openclaw
↓
PowerShell 在 PATH 中找到 openclaw.ps1
↓
检查当前用户/系统的脚本执行策略(Execution Policy)
↓
策略是否允许运行本地脚本?
├─ 允许(RemoteSigned/Unrestricted) → 正常执行
└─ 不允许(Restricted/AllSigned) → 禁止运行脚本错误
3. 解决方案
方案一:调整当前用户的执行策略为 RemoteSigned(最推荐)
RemoteSigned 是一个比较均衡的策略:允许运行本地编写/生成的脚本,但要求从网络下载的脚本必须有数字签名,安全性和易用性之间取得了较好的平衡:
# 以普通用户身份运行即可,只影响当前用户,不需要管理员权限
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
# 确认修改结果
Get-ExecutionPolicy -List
方案二:临时绕过执行策略,只对当前会话生效(不做永久修改)
如果不想永久修改系统策略,可以只在当前 PowerShell 会话里临时放宽限制:
Set-ExecutionPolicy Bypass -Scope Process
openclaw --version
关闭当前终端窗口后,这个临时设置会自动失效,不影响其他会话或以后新开的窗口。
方案三:直接调用 .cmd 文件而非依赖 PowerShell 自动匹配
如果不方便修改执行策略(比如企业受管理的电脑),可以绕开 .ps1 脚本,显式调用 .cmd 版本:
openclaw.cmd --version
或者干脆改用命令提示符(CMD)而不是 PowerShell 来执行 OpenClaw 相关命令。
方案四:企业受限电脑上,联系 IT 部门统一调整组策略
如果执行策略是通过企业组策略(Group Policy)统一强制设置的,个人用户执行 Set-ExecutionPolicy 可能会被组策略覆盖而不生效。这种情况下需要联系 IT/安全部门,说明具体的开发需求,评估是否可以针对开发人员账户单独放宽策略,而不是绕过安全合规要求私自修改。
方案五:使用跨平台 PowerShell(pwsh)并单独确认其执行策略
如果同时安装了新版跨平台 PowerShell(pwsh.exe),需要注意它和 Windows 自带的旧版 PowerShell(powershell.exe)的执行策略是分别独立配置的,需要针对实际使用的版本单独确认和调整:
# 在 pwsh 中单独设置
pwsh -Command "Set-ExecutionPolicy RemoteSigned -Scope CurrentUser"
4. 各方案对比总结
| 方案 | 适用场景 | 推荐指数 |
|---|---|---|
| 调整为 RemoteSigned | 个人开发机的标准长期解决方案 | ⭐⭐⭐⭐⭐ |
| 会话级临时绕过 | 只是临时用一次,不想改永久配置 | ⭐⭐⭐⭐ |
| 直接调用 .cmd 文件 | 不方便修改执行策略的场景 | ⭐⭐⭐⭐ |
| 联系 IT 调整组策略 | 企业受管理电脑,策略被组策略锁定 | ⭐⭐⭐ |
| 单独确认 pwsh 策略 | 同时使用新旧两版 PowerShell 的场景 | ⭐⭐⭐ |
5. 常见问题 FAQ
5.1 把执行策略设置为 Unrestricted 是不是更省心?
不建议。Unrestricted 会允许运行任何脚本(包括未签名的、从网络下载的脚本),安全风险明显更高。RemoteSigned 已经能满足绝大多数日常开发需求,同时保留了对网络脚本的签名校验,是更均衡的选择。
5.2 这个问题是不是意味着 OpenClaw 安装出了问题?
不是。这个报错和 OpenClaw 本身的安装/代码质量完全无关,纯粹是 Windows PowerShell 的安全策略在正常发挥拦截作用,任何通过 npm 全局安装并生成 .ps1 包装脚本的工具(不只是 OpenClaw)都可能遇到同样的问题。
5.3 修改执行策略会不会影响系统里其他软件的正常运行?
RemoteSigned 策略只是放宽了对"本地脚本"的限制,对系统正常运行的各类原生程序(.exe)没有任何影响,绝大多数正规软件的安装和运行也不依赖用户级的 PowerShell 脚本执行策略。
5.4 公司电脑上没有权限执行 Set-ExecutionPolicy,还有别的办法吗?
优先尝试方案三(直接调用 .cmd 文件)或者干脆改用命令提示符(CMD)执行相关命令,这两种方式都不涉及 PowerShell 脚本执行策略,能在不需要额外权限的情况下绕开这个限制。
5.5 团队新人入职时,如何避免每个人都要单独排查一次这个问题?
建议在团队的开发环境搭建文档(Onboarding 文档)里,明确写出"Windows 用户需要执行 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser"这一步骤,作为环境初始化的标准步骤之一,而不是等每个人各自遇到报错时才现场排查。
5.6 macOS/Linux 上有类似的"脚本执行被禁止"的问题吗?
有类似但不完全相同的机制——macOS/Linux 上,脚本文件需要有可执行权限(chmod +x)才能直接运行,如果遇到"Permission denied"报错,思路是检查文件权限而不是执行策略,两个平台的具体排查方式不同,但本质上都是系统层面的安全限制。
5.7 排查清单速查表
□ 1. 确认报错信息中是否明确提到 PSSecurityException/执行策略相关字样
□ 2. 用 Get-ExecutionPolicy -List 查看当前各个作用域的策略设置
□ 3. 评估是否可以调整为 RemoteSigned(个人开发机推荐做法)
□ 4. 不想永久修改时,使用会话级临时绕过方式
□ 5. 企业受限电脑优先尝试直接调用 .cmd 文件绕开限制
□ 6. 确认是否有组策略统一锁定了执行策略,需要联系 IT 部门
□ 7. 团队 Onboarding 文档中明确写出该步骤,避免重复排查
6. 总结
"因为在此系统上禁止运行脚本"报错的本质是Windows PowerShell 默认的脚本执行策略拦截了 npm 生成的 .ps1 包装脚本,这是系统级安全机制在正常工作,而不是 OpenClaw 的安装或代码存在问题。核心处理思路:
- 对个人开发机,调整执行策略为
RemoteSigned是最推荐的一次性解决方案; - 企业受限电脑不方便修改策略时,直接调用
.cmd版本或改用 CMD 能绕开这个限制; - 如果策略被组策略统一锁定,应该联系 IT 部门评估合规的放宽方式,而不是尝试各种非常规手段强行绕过。
最佳实践建议:把 PowerShell 执行策略的调整作为团队 Windows 开发环境标准初始化脚本的一部分,一次性配置好,避免每个新成员、每台新电脑都要重新踩一次这个和具体工具无关的通用性 Windows 安全策略坑。
更多推荐



所有评论(0)