我写了一个宏来浏览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
答案 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