TIA 授权管家 zhongjiezhou123321-alt/tia-openness-auth
DeepSeek Harness预授权并自动放行西门子 TIA 授权弹窗
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add zhongjiezhou123321-alt/tia-openness-auth该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · security
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 15 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/17) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0⚪ 扫描:无法判定尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0已尝试扫描但取不到可分析的源码:仓库或包不存在、已删除,或为非 JS/TS 实现、未随包发布源码。无法判定,不代表安全。
- · 包内无可扫 JS
- · TS 源码(可能为非 JS 实现或未发布源码),无法判定
扫描于 2026/10/31(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
西门子 TIA Portal Openness 给智能体授权:预授权 exe、自动点掉授权弹窗、清理过期的白名单条目
README
由 DeepSeek 最新模型翻译生成tia-openness-auth
西门子 TIA Portal Openness 授权管理 —— 一个 DeepSeek Harness 技能,同时也能被任何支持 SKILL.md 的 Agent 使用。
解决三个真实痛点:
| 痛点 | 症状 | 本项目的解法 |
| 反复弹窗 | 每次重新编译 exe,TIA 又弹「Openness 访问」确认框 | -Action grant 预授权(按 SHA256 写入白名单) |
| 弹窗卡住无人值守 | CI / 通宵跑测试时,弹窗一直停着等点击 | -Action watch 守护进程,自动点「是」 |
| 白名单无限膨胀 | 注册表里堆了几百条早已过期的哈希 | -Action prune 清理失效条目 |
背景:Openness 到底在校验什么
每次进程连接 TIA Portal,Openness 做两道检查,任一不过就弹窗或拒绝:
| 检查 | 位置 |
| 用户组 | Windows 本地组 Siemens TIA Openness(改完需注销重登) |
| 程序指纹 | HKLM\SOFTWARE\Siemens\Automation\Openness\AllowList\<exe名>\Entry (N) |
每条 Entry 有三个 REG_SZ 值:
Path = exe 完整路径
展开完整文档(README 剩余 1 节)
tia-openness-auth
西门子 TIA Portal Openness 授权管理 —— 一个 DeepSeek Harness 技能,同时也能被任何支持 SKILL.md 的 Agent 使用。
解决三个真实痛点:
| 痛点 | 症状 | 本项目的解法 |
| 反复弹窗 | 每次重新编译 exe,TIA 又弹「Openness 访问」确认框 | -Action grant 预授权(按 SHA256 写入白名单) |
| 弹窗卡住无人值守 | CI / 通宵跑测试时,弹窗一直停着等点击 | -Action watch 守护进程,自动点「是」 |
| 白名单无限膨胀 | 注册表里堆了几百条早已过期的哈希 | -Action prune 清理失效条目 |
背景:Openness 到底在校验什么
每次进程连接 TIA Portal,Openness 做两道检查,任一不过就弹窗或拒绝:
| 检查 | 位置 |
| 用户组 | Windows 本地组 Siemens TIA Openness(改完需注销重登) |
| 程序指纹 | HKLM\SOFTWARE\Siemens\Automation\Openness\AllowList\<exe名>\Entry (N) |
每条 Entry 有三个 REG_SZ 值:
Path = exe 完整路径
DateModified = exe 最后修改时间(本地时区,格式 yyyy/MM/dd HH:mm:ss.fff)
FileHash = Base64(SHA256(exe 文件字节))
这就是「每次重编译都要重新授权」的根因:exe 字节变了 → SHA256 变 → 与白名单对不上 → 弹窗。
关键认知:两个按钮语义相反
授权弹窗有三个按钮,前两个语义完全不同:
| 按钮 | 行为 | 该用在哪 |
| 是 | 只授权本次,不写白名单 | ✅ 调试期(exe 反复重编译) |
| 全部确定 | 授权并把当前哈希写进白名单 | ✅ 交付期(exe 定型不再变) |
| 否 | 拒绝 | — |
⚠️ 调试期不要点「全部确定」。每编译一次就写一条,很快堆出几百条立即过期的记录(实测一台机器积到 228 条)。用「是」放行本次即可。
安装
DeepSeek Harness:把整个目录放进技能根目录之一:
~/.dsh/skills/tia-openness-auth/ # 用户级 <项目>/.dsh/skills/tia-openness-auth/ # 项目级
其它 Agent(Claude Code / Codex / Cursor 等):放进各自的 skills 目录,只要能读到 SKILL.md 即可。
前置条件:
- Windows
- PowerShell 7(pwsh)—— 脚本用了 PS7 的 UTF-8 默认编码
- TIA Portal V15–V21(已在 V21 实测)
- 当前用户属于 Siemens TIA Openness 本地组
用法
$skill = "<安装路径>/scripts/tia-openness-auth.ps1"
查看当前授权状态(不需要管理员) pwsh -File $skill -Action status
预授权一个 exe(需管理员:写 HKLM) pwsh -File $skill -Action grant -ExePath "D:\build\MyApp.exe"
清理过期条目(需管理员) pwsh -File $skill -Action prune
关闭 / 恢复安全确认弹窗(全局开关,慎用) pwsh -File $skill -Action insecure -Popup off pwsh -File $skill -Action insecure -Popup on
自动点击守护
$ac = "<安装路径>/scripts/tia-openness-autoclick.ps1"
常驻监听(8 小时) pwsh -File $ac -Action watch -Minutes 480
只看当前有没有弹窗(不点) pwsh -File $ac -Action list
处理一次就退出 pwsh -File $ac -Action once
预演:只显示会点哪个按钮 pwsh -File $ac -Action once -DryRun
开机自启(静默)
把下面内容存为 %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\openness-autoclick.vbs:
Dim shell, script
Set shell = CreateObject("WScript.Shell")
script = "<安装路径>\scripts\tia-openness-autoclick.ps1"
shell.Run "pwsh.exe -NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File """ & script & """ -Action watch", 0, False
0 = 隐藏窗口,False = 不等待。
技术内幕:为什么不能靠 UI Automation
那个授权对话框是实现上的一朵奇葩,常规办法全部失效:
| 常规做法 | 结果 | 原因 |
| UIA RootElement.FindAll | 找不到对话框 | 模态 WinForms 子窗口不在 RootElement 子树里 |
| AutomationElement.FromHandle(hwnd) | 拿到窗口,但按钮数 = 0 | 该对话框不提供 UIA 控件树 |
| Win32 GetWindowText 读按钮 | 全部空字符串 | 按钮自绘,无 WM_GETTEXT 响应 |
实际可行的方案:
EnumWindows 找标题含 "Openness" 的可见窗口 ↓ EnumChildWindows 取 class 含 BUTTON 的子窗口 ↓ 按 x 坐标排序,取最左 ← 最左 = 「是」 ↓
SendMessage(hwnd, BM_CLICK)
几何特征(实测,502×262 对话框)
是 x=497 w=73 ← 最左,目标全部确定 x=576 w=93 ← 唯一更宽的(文字更长)否 x=675 w=73 ← 最右
窗口位置变了按钮坐标会同步偏移,但相对顺序与宽度不变,所以按 x 排序取最左是稳的。
点后自检
点击后对比白名单条目数:
| 结果 | 含义 |
| 不增长 | ✅ 点的是「是」(仅本次授权) |
| 增长 | ⚠️ 误点了「全部确定」,或布局变了 |
安全边界
1. 只匹配标题含 Openness 的窗口。TIA 的「是否对设备进行修改」等确认框不会被触碰——那类操作会真的写 PLC,必须人工判断。
2. 按钮数 < 2 时跳过不点,宁可留弹窗也不乱点。
3. -NoGeometricFallback:只用 UI Automation 路径(最保守,可能完全不动作)。
4. -DryRun:只打印将要点击的按钮,不真点。
5. prune 只删哈希对不上的条目,绝不删当前有效授权。
6. insecure -Popup off 是全局降级——本机任何程序调 Openness 都不再确认。仅限完全可信的测试机。
实测记录
环境:Windows 10 · TIA Portal V21 · PowerShell 7.6.7 · D 盘安装
自动点击(30 分钟守护,3 个弹窗) [12:09:00] 检测到 Openness 弹窗 #1 hwnd=986384 rect=(260,494)-(762,756) [12:09:00] 几何兜底:选中最左按钮(是) hwnd=1969044 pos=(497,715) 共3个
[12:09:01] [OK] 白名单未增长 —— 符合预期(点的是「是」,只授权本次)
白名单清理清扫白名单(管理员=True,模式=执行) MyApp.exe:过期 3 条 已删除合计:14 条 -> 2 条
已知限制
- 按钮文字读不出,只能靠几何位置。若西门子改了对话框布局,需重新校准(用 -DryRun 验证)。
- 只测过 V21。V15–V20 的单体 Openness API 授权机制理论相同(同注册表项),但未实测。
- grant 写 HKLM 需要管理员;脚本会检测并明确报错,不会静默失败。
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
zhongjiezhou123321-alt/tia-openness-auth
预授权并自动放行西门子 TIA 授权弹窗
相关插件 · 安全 / 权限
智能体逆向工程morluto/rea
用智能体逆向工程任何东西,从应用行为到原生二进制。
★ 415,267已汉化DSH
73.3
智能体集群框架ruvnet/ruflo
面向 Claude Code 与 Codex 的智能体元基座meta-harness。
★ 80,414已汉化MCP
71.9
WorkBuddy 模型接入corrinehu/dsh-workbuddy-connect
2026 年 10 月 20 日起,WorkBuddy…
★ 1,604已汉化DSH
71.7
破甲一键通z91772524-ai/pojia-next
十五个 AI…
★ 967已汉化DSH
71.6
AI 代理虚拟终端strukto-ai/mirage
Mirage 是给 AI 智能体用的虚拟终端:一层 shell,统管数据、命令行和运行时。Unix…
★ 3,756已汉化DSH
70.8
Agent 操作层agentic-os-org/ANOLISA
ANOLISA(Agentic Nexus Operating Layer & Interface System Architecture)|智能体操作系统,带运行时、安全、可观测性,以及 Tokenless 响应压缩,降低 token 用量与成本。
★ 649已汉化DSH
70.7