1. Windows 下 OpenClaw 执行策略报错到底卡在哪
如果你在 Windows 上跑 OpenClaw,第一次启动大概率会撞上两类报错:一类是 PowerShell 甩出来的红字,说脚本被系统禁止运行;另一类是程序弹窗提示访问被拒绝,或者干脆一闪而过。这两个问题看着像玄学,其实根子都在 Windows 的安全机制上——执行策略管的是“脚本能不能跑”,UAC 管的是“进程有没有权限”。
先把执行策略这件事说清楚。PowerShell 有一套独立于文件权限的安全开关,叫 Execution Policy。它不判断脚本内容好坏,只判断脚本来源和签名状态。默认情况下,Windows 客户端系统的 LocalMachine 作用域通常是 Restricted,意思是任何 .ps1 文件都不许执行,你只能在命令行里一行行敲。OpenClaw 如果带了 PowerShell 启动脚本、安装脚本或者内部调用了 .ps1 模块,就会直接撞墙,报出类似 “running scripts is disabled on this system” 的错误。
执行策略有六个常见取值,我列个表方便你对照:
| 策略值 | 行为 | 适合场景 |
|---|---|---|
| Restricted | 禁止所有脚本 | 默认,最严格 |
| AllSigned | 只跑受信任签名的脚本 | 企业受控环境 |
| RemoteSigned | 本地脚本可跑,远程脚本要签名 | 开发机推荐 |
| Unrestricted | 都跑,远程脚本会警告 | 临时调试 |
| Bypass | 全放行,无警告 | 受控自动化 |
| Undefined | 继承上层作用域 | 未显式设置 |
作用域优先级从高到低是 MachinePolicy、UserPolicy、Process、CurrentUser、LocalMachine。组策略一旦设了 MachinePolicy,你在本地怎么改都会被覆盖,这是很多人改了没生效的根本原因。
再说管理员权限。UAC 的设计逻辑是:即使你登录的是管理员账户,系统也默认给你一个标准用户令牌,只有当你显式确认提升时,才切换到管理员令牌。OpenClaw 如果需要写系统目录、改注册表、操作服务或者绑定特权端口,标准令牌下就会报 “Access is denied (5)” 或者 “requires elevation”。很多人以为自己是管理员就万事大吉,其实默认进程根本没带管理员权限。
这两个问题经常一起出现:执行策略拦住了启动脚本,你绕过策略后脚本跑起来了,结果脚本内部又要写受保护路径,权限不够再次报错。所以排查要按顺序来,先解决策略,再解决权限,最后才是接入配置。下面我按这个顺序把每一步都写成可复制的命令。
2. TaoToken 统一 Key 接入前的环境准备
OpenClaw 这类工具在完成本地权限修复后,通常需要对接一个大模型 API 才能发挥完整能力。TaoToken 在这里的角色是提供一个统一的 API 通道和 Key 管理入口,你不需要在多个模型供应商之间来回切换配置,一个 Base URL 加一个 Key 就能把请求发出去。官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 入口是 https://taotoken.net/api 。
在 Windows 上做接入准备,我建议先把三样东西确认好:一是 PowerShell 能正常执行脚本,二是当前进程有足够的权限写配置文件,三是网络能正常访问 API 地址。前两样就是上一节要解决的问题,第三样用一条命令就能验证。
先确认你的 PowerShell 版本,OpenClaw 的启动脚本一般要求 5.1 以上:
$PSVersionTable.PSVersion如果显示 5.1 或 7.x 都行。接着确认执行策略当前状态:
Get-ExecutionPolicy -List你会看到一张表,重点看 MachinePolicy 和 UserPolicy 是不是 Undefined。如果是 Undefined,说明没有组策略锁定,你可以自己改 CurrentUser 或 LocalMachine。如果这两个有值,说明被域策略管着,本地改不动,得找 IT 管理员。
然后确认当前是不是管理员权限:
([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)返回 True 就是管理员,False 就是标准权限。如果是 False,你需要用管理员身份重开一个 PowerShell 窗口,方法在后面会写。
网络连通性用这条测:
Test-NetConnection taotoken.net -Port 443TcpTestSucceeded 为 True 就说明 443 通。如果这里不通,先检查本机防火墙和公司网络策略,别急着往下走。
环境确认完之后,去 TaoToken 控制台创建一个 API Key。打开 https://taotoken.net/api-keys ,登录后新建一个 Key,复制出来先存到记事本里。这个 Key 只显示一次,丢了就得重建。同时把模型 ID 也记下来,比如 claude-sonnet-4-20250514 这类,后面配置里要填。
有一点要提醒:不要把 Key 直接写死在会提交到 Git 的脚本里。Windows 上可以用环境变量存,或者放在用户目录下的配置文件里,权限设成只有自己能读。下面配置环节我会给出具体做法。
3. 可复制的执行策略调整与 OpenClaw 配置片段
这一节是整篇的核心,我把执行策略调整、管理员启动、OpenClaw 配置三块拆开写,每块都给完整命令或配置文件,你照着改路径就能用。
3.1 执行策略调整命令
最稳妥的做法是先只改 CurrentUser 作用域,不影响系统其他用户:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned -Force执行完再查一次确认:
Get-ExecutionPolicy -Scope CurrentUser返回 RemoteSigned 就对了。如果你只是临时跑一次 OpenClaw 的安装脚本,不想改全局,可以用 Process 作用域,关掉窗口就恢复:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force还有一种不改策略、只对单个脚本放行的方式:
powershell -ExecutionPolicy Bypass -File .\openclaw-setup.ps1这种方式适合你从别人那里拿到一个脚本,只想跑一次、不想动系统设置的情况。
3.2 管理员权限启动步骤
如果你当前 PowerShell 不是管理员,有两个办法重开。图形界面方式是右键点击“Windows PowerShell”或“终端”,选“以管理员身份运行”,UAC 弹窗点“是”。
命令行方式是在当前窗口里执行:
Start-Process powershell -Verb RunAs这会弹出一个新的管理员 PowerShell 窗口。如果你要直接在管理员窗口里跑 OpenClaw 的脚本,可以这样:
Start-Process powershell -ArgumentList "-ExecutionPolicy Bypass -File `"C:\OpenClaw\openclaw-setup.ps1`"" -Verb RunAs注意路径里的反引号是转义引号用的,路径有空格时必须这么写。
3.3 OpenClaw 侧 Base URL 与 Key 配置
OpenClaw 的配置方式取决于你用的版本,常见的有 JSON 配置文件和 TOML 配置文件两种。我先给 JSON 版本,路径一般是C:\Users\你的用户名\.openclaw\config.json:
{ "provider": { "base_url": "https://taotoken.net/api", "api_key": "sk-你的TaoToken密钥", "model": "claude-sonnet-4-20250514", "timeout": 60 }, "tools": { "shell": { "enabled": true, "execution_policy": "RemoteSigned" } } }如果你用的是 TOML 格式,路径可能是C:\Users\你的用户名\.openclaw\config.toml:
[provider] base_url = "https://taotoken.net/api" api_key = "sk-你的TaoToken密钥" model = "claude-sonnet-4-20250514" timeout = 60 [tools.shell] enabled = true execution_policy = "RemoteSigned"三件套必须齐全:Base URL 填https://taotoken.net/api,Key 填你刚创建的,Model ID 填控制台里看到的模型名。少任何一个都会在请求时报错。
如果你不想把 Key 明文写在配置文件里,可以用环境变量。在管理员 PowerShell 里执行:
[Environment]::SetEnvironmentVariable("TAOTOKEN_API_KEY", "sk-你的密钥", "User")然后在配置文件里把 api_key 那行改成:
"api_key": "${TAOTOKEN_API_KEY}"OpenClaw 支持环境变量插值的话这样最安全。改完环境变量要重开终端才生效。
3.4 权限不足时的 ACL 调整
如果 OpenClaw 需要写某个受保护目录,比如C:\ProgramData\OpenClaw,而当前用户没权限,可以用 icacls 授权:
icacls "C:\ProgramData\OpenClaw" /grant "你的用户名:(OI)(CI)F" /T(OI)(CI)表示对象继承和容器继承,F是完全控制,/T是递归应用到子目录。执行完再跑 OpenClaw 就不会报写入了。
4. 验证请求与成功结果确认
配置改完必须验证,不然你不知道是策略生效了还是碰巧没触发。验证分两步:先确认本地脚本能跑,再确认 API 请求能通。
第一步,写一个最小测试脚本test-openclaw.ps1:
Write-Host "Execution Policy: $(Get-ExecutionPolicy -Scope CurrentUser)" Write-Host "Is Admin: $(([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))" Write-Host "OpenClaw config exists: $(Test-Path "$env:USERPROFILE\.openclaw\config.json")"直接运行:
.\test-openclaw.ps1如果不再报 “running scripts is disabled”,说明执行策略已经放行。输出里 Is Admin 为 True 说明权限也到位了。
第二步,验证 API 通道。用 PowerShell 直接发一个请求到 TaoToken:
$headers = @{ "Authorization" = "Bearer sk-你的TaoToken密钥" "Content-Type" = "application/json" } $body = @{ model = "claude-sonnet-4-20250514" max_tokens = 64 messages = @( @{ role = "user"; content = "回复两个字:通了" } ) } | ConvertTo-Json -Depth 5 $response = Invoke-RestMethod -Uri "https://taotoken.net/api/v1/messages" -Method Post -Headers $headers -Body $body $response.content如果返回内容里能看到模型回复的文字,说明 Base URL、Key、Model ID 三件套全部正确。如果报 401,说明 Key 不对或没带 Bearer 前缀;如果报 404,检查 Base URL 是不是多了或少了/v1;如果超时,回到网络连通性那步排查。
第三步,启动 OpenClaw 本体,观察日志。正常启动后日志里应该出现类似 “provider initialized”“model loaded” 的字样,然后你发一条测试指令,看它能不能正常返回。如果 OpenClaw 有--verbose或--debug参数,加上它能看到完整的请求 URL 和响应状态码,排错时非常有用。
我实测下来,最容易出问题的不是策略也不是权限,而是配置文件路径写错。OpenClaw 读的是用户目录下的.openclaw,你如果改的是安装目录下的配置,它根本不看。用Test-Path确认一下你改的文件就是它读的文件。
5. 本篇常见报错排查对照
这一节我把实际会撞到的报错逐条列出来,对照着改就行。
报错一:File xxx.ps1 cannot be loaded because running scripts is disabled on this system
这是执行策略拦截。先Get-ExecutionPolicy -List看哪个作用域是 Restricted。如果是 LocalMachine,用管理员 PowerShell 执行Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy RemoteSigned -Force。如果是 MachinePolicy 有值,说明组策略锁定,本地改不了,需要联系管理员。改完记得重开 PowerShell 窗口,Process 作用域的改动才即时生效。
报错二:Access is denied. (5)或The requested operation requires elevation
这是权限不足。确认当前进程是不是管理员,用第 2 节那条 IsInRole 命令测。不是的话用Start-Process powershell -Verb RunAs重开。如果已经是管理员还报这个错,说明目标资源 ACL 更严格,用 icacls 检查并授权。还有一种情况是杀毒软件拦截,临时关掉测试一下,确认是它的问题就加白名单。
报错三:401 Unauthorized或invalid api key
Key 不对。检查三件事:Key 有没有复制完整、请求头有没有带Bearer前缀、Key 有没有被禁用或删除。去 https://taotoken.net/api-keys 重新确认一下 Key 状态。
报错四:local proxy failed或连接被拒绝
这种一般是本地代理配置冲突。检查系统环境变量里有没有HTTP_PROXY、HTTPS_PROXY指向一个没启动的本地端口。用Get-ChildItem Env: | Where-Object Name -match "PROXY"查一下,有的话清掉:
Remove-Item Env:HTTP_PROXY -ErrorAction SilentlyContinue Remove-Item Env:HTTPS_PROXY -ErrorAction SilentlyContinue报错五:reading choices或响应解析失败
这通常是返回体不是预期的 JSON 结构。先用第 4 节的 Invoke-RestMethod 直接测 API,看原始返回是什么。如果返回的是 HTML 错误页,说明 URL 路径不对;如果返回 JSON 但字段名不匹配,检查 Model ID 是不是写错了,或者该模型不支持你用的接口格式。
报错六:OAuth 相关错误,比如OAuth token expired或invalid_grant
如果你用的是需要 OAuth 的接入方式,token 过期了。重新走一遍授权流程,或者改用 API Key 方式接入。TaoToken 的 API Key 方式不需要 OAuth,配置更简单,推荐优先用这种。
报错七:Codex auth.json读取失败
如果你同时装了 Codex 类工具,它可能去读~/.codex/auth.json。确认这个文件存在且格式正确,或者把 OpenClaw 的配置指向独立的路径,避免互相干扰。
排查的通用思路是:先看报错原文,定位是策略层、权限层还是网络层;再用最小复现命令逐层验证;最后才改配置。不要一上来就乱改一堆设置,那样出了问题你都不知道是哪步导致的。
6. 长期使用建议与接入入口
把执行策略和权限问题解决之后,日常使用其实很省心。我自己的习惯是:CurrentUser 作用域设成 RemoteSigned,不动 LocalMachine,这样既能让本地脚本跑起来,又不会因为全局放行带来安全风险。需要管理员权限的操作单独用管理员窗口做,不把整个日常终端都提权。
Key 管理方面,建议在 TaoToken 控制台按用途建不同的 Key,比如一个给 OpenClaw 用,一个给其他工具用。这样哪个 Key 出问题或者要轮换,影响范围可控。控制台地址是 https://taotoken.net/console ,Key 管理在 https://taotoken.net/api-keys 。
如果你打算长期跑编码类任务或者 Agent 工作流,可以了解一下 Coding Plan,入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。模型对话调试入口在 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。
最后说一个我踩过的坑:Windows 的路径分隔符和引号转义在 PowerShell 里特别容易出错。配置文件路径尽量用正斜杠或者双反斜杠,带空格的路径一定用引号包起来。改完配置先跑一遍第 4 节的验证脚本,确认三件套都对了再启动 OpenClaw,能省掉大量来回折腾的时间。