Skip to content

命令行界面(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.exeea20_cli.exe 两个文件。

启用 CLI

打开 EasyAccess 2.0 应用程序设置,切换到一般,启用 Enable CLI 选项。

alt text

命令参考

要查看所有可用命令,请运行:

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 settings

JSON 输出

返回数据的命令使用 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-user
json
{"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: ADMIN
powershell
$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-list
json
{
  "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 ABCD1234EFGH5678IJKL9012MNOP3456
text
10.7.0.1
python
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.1
powershell
$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.10
powershell
.\ea20_cli_example.ps1 <hwkey> <穿透IP>

# 示例:
.\ea20_cli_example.ps1 ABCD1234EFGH5678IJKL9012MNOP3456 192.168.1.10

这些脚本包括:

  • 使用已保存的帐号密码登录
  • 用户信息检索
  • HMI 列表枚举
  • VPN 连接建立
  • 穿透配置
  • 路由验证和 ping 测试
  • 正确的错误处理和输出格式化