我有一台正在测试的 Linux 机器,还有一个 Excel 工作簿,里面有我正在运行的测试表。(不要纠结于 Linux,它只是这个问题的一个 Telnet 目标。)工作簿启动与 Linux 机器的 telnet 会话,然后发出命令来设置一些变量(模拟真实世界的输入)。然后,工作簿根据输入变量读回 Linux 机器运行的作业的结果。
我试过http://officetricks.com/start-telnet-session-from-excel-autorun-commands/,但 MSWinsockLib 不可用(已停用?我正在使用 Win10 / M365)。
因此,我找到了一些关于发送命令行和读取结果的文章,并且使用 PLink 可以正常工作:
执行命令并读取结果:https://stackoverflow.com/a/55158380/2317071
连接时跳过 PLink 提示确认:https://stackoverflow.com/a/57736579/2317071
我遇到的问题是,telnet 会话每条命令需要 4 秒,我认为这主要是由于初始登录/确认提示。这听起来不多,但我已经千(可能有数万个!)要发送的命令(并且宏运行时我的电脑无法使用)。
因此,我想知道:
- 有没有办法使用 PLink 来避免这种延迟?
- 有什么方法可以打开 telnet 会话、保持其打开、发送新命令并记录单独的结果?
- 有没有更好的方法从 Excel 查询 telnet/ssh 目标?(我花了太多时间搜索,却一无所获!)
这是我的代码被盗呃借来的呃学到了来自其他 StackExchange / StackOverflow 帖子:
'https://stackoverflow.com/a/55158380/2317071
Function F_shellExec(sCmd As String) As String
F_ShellExec_StartTime = Now()
Dim oShell As New WshShell 'requires ref to Windows Script Host Object Model
Debug.Print "F_shellExec: sCmd = " & sCmd
F_shellExec = oShell.Exec(sCmd).StdOut.ReadAll
F_ShellExec_EndTime = Now()
F_ShellExec_ExecTime = F_ShellExec_EndTime - F_ShellExec_StartTime
Debug.Print "F_shellExec took " & Format(F_ShellExec_ExecTime, "HH:MM:SS")
End Function
Sub ShellExec_tests()
PLink_Call = "plink.exe -batch -ssh [email protected] -pw " & SSHPassWord & " "
Shell_Cmd = "databaseread -t Tag.To.Read.Value.From"
Debug.Print "Shell_Cmd = " & Shell_Cmd
Debug.Print F_shellExec(PLink_Call & Shell_Cmd)
End Sub
感谢您的帮助!