通过VBA Excel访问Plink SSH并终止cmd提示符
我编写了一个宏来遍历IP地址列表,并通过plink.exe运行SSH。IP用于网络安全设备 如果SSH是可访问的,那么输出将是“login as:”,这意味着我可以通过SSH连接到设备。cmd的输出被读取到excel中的一个单元格中,并显示在表格中,因为设备是可访问的 问题是在执行top IP的代码后,plink.exe窗口不会关闭,我必须手动关闭窗口以再次循环代码以转到下一个IP。如果不知何故,我可以自动关闭程序中的窗口,以便它可以运行所有IP(大约有100个IP) 重要的是,我不想在“登录身份:”之后向cmd发送任何登录信息。我想在获取输出后立即终止程序并关闭cmd窗口。谢谢你的帮助通过VBA Excel访问Plink SSH并终止cmd提示符,excel,plink,vba,Excel,Plink,Vba,我编写了一个宏来遍历IP地址列表,并通过plink.exe运行SSH。IP用于网络安全设备 如果SSH是可访问的,那么输出将是“login as:”,这意味着我可以通过SSH连接到设备。cmd的输出被读取到excel中的一个单元格中,并显示在表格中,因为设备是可访问的 问题是在执行top IP的代码后,plink.exe窗口不会关闭,我必须手动关闭窗口以再次循环代码以转到下一个IP。如果不知何故,我可以自动关闭程序中的窗口,以便它可以运行所有IP(大约有100个IP) 重要的是,我不想在“登录身
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
Sub-SSH()
关于错误转到错误处理程序
i=3
j=200
While(ActiveSheet.Cells(i,3)”)
'从单元格中检索IP地址
strCompAddress=ActiveSheet.Cells(i,3)
Dim STRSHELL命令作为字符串
将文件名设置为字符串
以字符串形式运行
将指针变暗为字符串
'从不同工作表中的单元格链接文件位置
filename=Sheet1.Cells(8,2).Value
指针=“-ssh”
Run=filename&&&pointer&&strCompAddress
设置osh=CreateObject(“Wscript.Shell”)
设置oEx=osh.Exec(运行)
'将输出插入到指定的单元格
strBuf=oEx.StdOut.ReadAll
单元格(j,21)=strBuf
i=i+1
j=j+1
温德
出口接头
ErrHandler:MsgBox“请检查文件名/地址。”
端接头
该方法返回具有方法的对象。您需要的是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
我能解决这个问题。我必须让应用程序等待一段时间,然后才能终止它,从而能够根据需要获得输出。谢谢你的帮助
Set oEx = osh.Exec(Run)
Application.Wait (Now + TimeValue("0:00:5"))
oEx.Terminate
这在我获取输出之前起作用,但之后就不起作用了。您的原始代码是否曾经到达过行
ActiveSheet.Cells(j,21)=strBuf
?有可能直到应用程序关闭,oEx.StdOut.ReadAll
才停止读取。如果IP可以通过SSH访问,则原始代码打印“登录为:”并且如果无法访问,则为空。哦,好的,我会尝试一下并让您知道。谢谢。根据您的建议终止后,plink.exe仍不会关闭。