【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 具体现象

  1. 命令提示符(CMD)里执行完全正常,PowerShell 里却报这个安全错误
  2. 换成公司配发的电脑(通常有更严格的安全策略)更容易复现
  3. 有些人发现自己之前能正常用,某次系统更新或安全策略调整后突然不能用了
  4. 报错信息明确提到"禁止运行脚本",但很多人第一反应会去检查安装是否有问题,而不是执行策略

这是 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 的安装或代码存在问题。核心处理思路:

  1. 对个人开发机,调整执行策略为 RemoteSigned 是最推荐的一次性解决方案
  2. 企业受限电脑不方便修改策略时,直接调用 .cmd 版本或改用 CMD 能绕开这个限制;
  3. 如果策略被组策略统一锁定,应该联系 IT 部门评估合规的放宽方式,而不是尝试各种非常规手段强行绕过。

最佳实践建议:把 PowerShell 执行策略的调整作为团队 Windows 开发环境标准初始化脚本的一部分,一次性配置好,避免每个新成员、每台新电脑都要重新踩一次这个和具体工具无关的通用性 Windows 安全策略坑。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐