Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过VBA Excel访问Plink SSH并终止cmd提示符_Excel_Plink_Vba - Fatal编程技术网

通过VBA Excel访问Plink SSH并终止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) 重要的是,我不想在“登录身

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

如果SSH是可访问的,那么输出将是“login as:”,这意味着我可以通过SSH连接到设备。cmd的输出被读取到excel中的一个单元格中,并显示在表格中,因为设备是可访问的

问题是在执行top 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
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仍不会关闭。