Excel VBA 中的 PLink telnet - 避免登录延迟,或维持多个查询的会话

Excel VBA 中的 PLink telnet - 避免登录延迟,或维持多个查询的会话

我有一台正在测试的 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 秒,我认为这主要是由于初始登录/确认提示。这听起来不多,但我已经(可能有数万个!)要发送的命令(并且宏运行时我的电脑无法使用)。

因此,我想知道:

  1. 有没有办法使用 PLink 来避免这种延迟?
  2. 有什么方法可以打开 telnet 会话、保持其打开、发送新命令并记录单独的结果?
  3. 有没有更好的方法从 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

感谢您的帮助!

相关内容