通过VBA Excel进行Plink SSH访问并终止cmd提示

时间:2015-08-20 21:24:16

标签: excel-vba plink vba excel

我写了一个宏来浏览IP地址列表并通过plink.exe运行SSH。 IP用于网络安全设备。

如果SSH可以访问,输出将是"登录为:"这意味着我可以通过SSH连接到设备。 cmd的输出读取到excel中的单元格,并显示在表格中,因为设备可以访问。

问题是执行顶级IP代码后,plink.exe窗口没有关闭,我必须手动关闭窗口再次循环代码转到下一个IP。如果以某种方式,我可以自动关闭程序中的窗口,以便它可以运行所有IP(大约有100个IP')。

重要的一点是,我不希望在"登录为"之后向cmd发送任何登录信息。我想终止程序并在获取输出后关闭cmd窗口。我们将不胜感激。

Sub SSH()
On Error GoTo ErrHandler
i = 3
j = 200
While (ActiveSheet.Cells(i, 3) <> "")

'Retrieve IP address from the cell

strCompAddress = ActiveSheet.Cells(i, 3)

Dim strShellCommand As String
Dim filename As String
Dim Run As String
Dim pointer As String

'Plink file location from a cell in different sheet
filename = Sheet1.Cells(8, 2).Value
pointer = "-ssh"

Run = filename & " " & pointer & " " & strCompAddress
Set osh = CreateObject("Wscript.Shell")
Set oEx = osh.Exec(Run)

'The output is inserted to a cell specified
strBuf = oEx.StdOut.ReadAll
ActiveSheet.Cells(j, 21) = strBuf

i = i + 1
j = j + 1
Wend
Exit Sub
ErrHandler: MsgBox "Please check the filename/address."
End Sub

2 个答案:

答案 0 :(得分:1)

Wscript.Shell.Exec方法返回WshScriptExec对象,该对象具有Terminate方法。那个Terminate方法就是你想要的。

您可以像这样使用

Public Sub test()

    Dim WshShell, oExec
    Set WshShell = CreateObject("WScript.Shell")

    Set oExec = WshShell.Exec("calc")
    oExec.Terminate

    MsgBox oExec.Status

End Sub

修改

理想情况下,你会像这样实现这个

strBuf = oEx.StdOut.ReadAll
ActiveSheet.Cells(j, 21) = strBuf
oEx.Terminate

然而。我怀疑只要程序正在运行,ReadAll就会继续阅读。你想只读一行然后退出所以就这样做。

strBuf = oEx.StdOut.ReadLine
ActiveSheet.Cells(j, 21) = strBuf
oEx.Terminate ' now kill plink

答案 1 :(得分:0)

我能够找出问题所在。我必须让应用程序等待一段时间才能终止它,因此能够根据需要获得输出。谢谢你的帮忙。

Set oEx = osh.Exec(Run)
Application.Wait (Now + TimeValue("0:00:5"))
oEx.Terminate