命令行界面(CLI)
概述
EasyAccess 2.0 提供的 ea20_cli.exe 可用于程序化控制 EasyAccess 2.0 的各项功能,实现自动化脚本操作:
- 管理 HMI 连接、VPN、穿透配置,执行批量操作
- 与其他工具(如
easydownload_cli)集成,实现远程项目更新 - 创建定时任务,实现自动化维护和监控
要求
- 仅支援 Windows
- 必须先启动 EasyAccess 2.0 才能使用 ea20_cli.exe 控制
- 必须在 EA2.0 应用程序设置中启用 CLI 功能
安装
ea20_cli.exe 会随 EasyAccess 2.0 应用程序一起自动安装。在安装目录中可以找到 EasyAccess 2.0.exe 和 ea20_cli.exe 两个文件。
启用 CLI
打开 EasyAccess 2.0 应用程序设置,切换到一般,启用 Enable CLI 选项。

命令参考
要查看所有可用命令,请运行:
bash
ea20_cli.exe --help可用命令:
| 命令 | 说明 |
|---|---|
--show / --hide | 显示或隐藏 EA2.0 应用程序窗口 |
--login <domain> <user> <password> --login-saved | 使用帐号密码或已保存的帐号密码登录 |
--logout | 注销当前会话 |
--get-current-user | 获取当前登录用户信息 |
--get-hmi-list | 获取域中所有 HMI 的列表 |
--get-hmi <hw_key> | 获取特定 HMI 的详细信息 |
--connect <hw_key> | 连接到 HMI 并建立 VPN |
--disconnect <hw_key> | 断开与 HMI 的连接 |
--set-hmi-passthrough <hw_key> <ip1> [ip2] ... [ip6] | 配置穿透 IP |
--clear-hmi-passthrough <hw_key> | 清除所有穿透配置 |
安全提示
避免在脚本中使用明文密码的 --login 命令。建议先在 EA2.0 应用程序中安全保存帐号密码,然后使用 --login-saved 命令。
输出格式
ea20_cli.exe 根据命令使用两种输出格式:
简单文本输出
大多数命令返回简单文本响应:
- 成功:
success - 错误:
error: <错误消息>
示例:
text
success
error: login failed
error: timeout or EA2 CLI not enabled in app settingsJSON 输出
返回数据的命令使用 JSON 格式:
--get-current-user--get-hmi-list--get-hmi
JSON 结构(成功时):
json
{
"success": true,
"data": { ... }
}TIP
当这些命令执行失败时,会返回简单文本格式(如 error: <消息>),而不是 JSON 格式。
退出代码
| 退出代码 | 含义 |
|---|---|
0 | 成功 |
-1 | 超时或未启用 EA2 CLI |
-2 | 操作失败(查看错误消息了解详情) |
所有命令都返回退出代码。以 --login-saved 为例:
batch
ea20_cli.exe --login-saved
if %ERRORLEVEL% NEQ 0 (
echo Command failed with exit code: %ERRORLEVEL%
exit /b 1
)powershell
ea20_cli.exe --login-saved
if ($LASTEXITCODE -ne 0) {
Write-Host "Command failed with exit code: $LASTEXITCODE"
exit 1
}使用示例
示例 1:使用已保存的帐号密码登录
python
import subprocess
import sys
result = subprocess.run(["ea20_cli.exe", "--login-saved"], capture_output=True, text=True)
if result.returncode != 0:
print("Login failed")
sys.exit(1)
print("Login succeeded")powershell
ea20_cli.exe --login-saved
if ($LASTEXITCODE -ne 0) {
Write-Host "Login failed"
exit 1
}
Write-Host "Login succeeded"示例 2:获取当前用户信息
CLI 输出示例:
bash
ea20_cli.exe --get-current-userjson
{"data":{"domain":"TEST","username":"ADMIN"},"operation":"get_current_user","success":true}python
import subprocess
import json
result = subprocess.run(["ea20_cli.exe", "--get-current-user"], capture_output=True, text=True)
if result.returncode == 0:
user_info = json.loads(result.stdout)
print(f"Domain: {user_info['data']['domain']}")
print(f"Username: {user_info['data']['username']}")
# Output:
# Domain: TEST
# Username: ADMINpowershell
$result = ea20_cli.exe --get-current-user | ConvertFrom-Json
Write-Host "Domain: $($result.data.domain)"
Write-Host "Username: $($result.data.username)"
# Output:
# Domain: TEST
# Username: ADMIN示例 3:列出所有 HMI
CLI 输出示例:
bash
ea20_cli.exe --get-hmi-listjson
{
"success": true,
"operation": "get_hmi_list",
"data": [
{"hw_key": "ABCD1234EFGH5678IJKL9012MNOP3456", "is_online": true, "name": "cMT-ABCD", "nickname": "HMI1", "vpn_ip": "", "vpn_state": "disconnected", "vpn_type": ""},
{"hw_key": "WXYZ9876STUV5432PQRS1098LMNO6543", "is_online": false, "name": "cMT-EFGH", "nickname": "HMI2", "vpn_ip": "", "vpn_state": "disconnected", "vpn_type": ""}
]
}python
import subprocess
import json
result = subprocess.run(["ea20_cli.exe", "--get-hmi-list"], capture_output=True, text=True)
if result.returncode == 0:
hmi_list = json.loads(result.stdout)
for hmi in hmi_list['data']:
print(f"HW Key: {hmi['hw_key']}")
print(f"Nickname: {hmi.get('nickname', 'N/A')}")
print(f"Online: {hmi['is_online']}")
print("-" * 40)
# Output:
# HW Key: ABCD1234EFGH5678IJKL9012MNOP3456
# Nickname: HMI1
# Online: True
# ----------------------------------------
# HW Key: WXYZ9876STUV5432PQRS1098LMNO6543
# Nickname: HMI2
# Online: False
# ----------------------------------------powershell
$result = ea20_cli.exe --get-hmi-list | ConvertFrom-Json
foreach ($hmi in $result.data) {
Write-Host "HW Key: $($hmi.hw_key)"
Write-Host "Nickname: $($hmi.nickname)"
Write-Host "Online: $($hmi.is_online)"
Write-Host ("-" * 40)
}
# Output:
# HW Key: ABCD1234EFGH5678IJKL9012MNOP3456
# Nickname: HMI1
# Online: True
# ----------------------------------------
# HW Key: WXYZ9876STUV5432PQRS1098LMNO6543
# Nickname: HMI2
# Online: False
# ----------------------------------------示例 4:连接到 HMI 并获取 VPN IP
CLI 输出(成功时):
bash
ea20_cli.exe --connect ABCD1234EFGH5678IJKL9012MNOP3456text
10.7.0.1python
import subprocess
HW_KEY = "ABCD1234EFGH5678IJKL9012MNOP3456"
result = subprocess.run(["ea20_cli.exe", "--connect", HW_KEY], capture_output=True, text=True)
if result.returncode == 0:
vpn_ip = result.stdout.strip()
print(f"VPN IP: {vpn_ip}")
# Output: VPN IP: 10.7.0.1powershell
$HW_KEY = "ABCD1234EFGH5678IJKL9012MNOP3456"
$VPN_IP = ea20_cli.exe --connect $HW_KEY
Write-Host "VPN IP: $VPN_IP"
# Output: VPN IP: 10.7.0.1现在您可以使用此 VPN IP 访问 HMI:
- VNC:
10.7.0.1:5900 - FTP:
ftp://10.7.0.1 - HTTP:
http://10.7.0.1
示例 5:配置以太网透传
python
import subprocess
HW_KEY = "ABCD1234EFGH5678IJKL9012MNOP3456"
PLC_IP = "192.168.1.10"
result = subprocess.run(["ea20_cli.exe", "--set-hmi-passthrough", HW_KEY, PLC_IP],
capture_output=True, text=True)
if result.returncode == 0:
print("Pass-through configured successfully")
subprocess.run(["ping", PLC_IP])powershell
$HW_KEY = "ABCD1234EFGH5678IJKL9012MNOP3456"
$PLC_IP = "192.168.1.10"
ea20_cli.exe --set-hmi-passthrough $HW_KEY $PLC_IP
if ($LASTEXITCODE -eq 0) {
Write-Host "Pass-through configured successfully"
ping $PLC_IP
}完整示例脚本
以下提供完整的示例脚本,演示所有 EA20-CLI 功能(包括错误处理、路由验证和连接测试):
📥 下载 ea20_cli_example.py (Python)
📥 下载 ea20_cli_example.ps1 (PowerShell)
使用方式:
bash
python ea20_cli_example.py <hwkey> <穿透IP>
# 示例:
python ea20_cli_example.py ABCD1234EFGH5678IJKL9012MNOP3456 192.168.1.10powershell
.\ea20_cli_example.ps1 <hwkey> <穿透IP>
# 示例:
.\ea20_cli_example.ps1 ABCD1234EFGH5678IJKL9012MNOP3456 192.168.1.10这些脚本包括:
- 使用已保存的帐号密码登录
- 用户信息检索
- HMI 列表枚举
- VPN 连接建立
- 穿透配置
- 路由验证和 ping 测试
- 正确的错误处理和输出格式化