指令介面 (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 測試
- 正確的錯誤處理和輸出格式化