捕获在VBScript命令行输出(capture command line output in vb

2019-10-18 04:02发布

有一个简单的脚本,执行命令的服务器 - 简述:

//Create shell
set WshShell=CreateObject("WScript.Shell")
WshShell.run "cmd.exe"

//send commands
WshShell.SendKeys "telnet IP_ADDRESS"
WshShell.Sendkeys "dir"

服务器提供我想捕捉反馈。 我只需要拍摄第一线到一个变量,然后只需打印出变量来确认。

你能帮我吗? 谢谢。

Answer 1:

不要使用Windows telnet客户端自动化的目的。 该telnet客户端随Windows是仅用于交互使用的正确性。

我会用plink (从腻子套件在批处理模式下)这个:

plink.exe -telnet -batch IP_ADDRESS dir

该工具不需要安装,所以你可以简单地部署它旁边的脚本。

无论是在使用批处理文件运行head / tail ,或在一个VBScript使用Exec方法,这样你就可以从阅读的StdOut :

addr     = "62.39.x.x"
port     = 24
timeout  = 300 'seconds
timedOut = False

cmdline = "echo ""mute near get"" | plink.exe -telnet -batch " & addr & " -P " & port

Set sh = CreateObject("WScript.Shell")

'change working directory to directory containing script and plink executable
Set fso = CreateObject("Scripting.FileSystemObject")
sh.CurrentDirectory = fso.GetParentFolderName(WScript.ScriptFullName)

'wait until command completes or timeout expires
expiration = DateAdd("s", timeout, Now)
Set cmd = sh.Exec("%COMSPEC% /c " & cmdline)
Do While cmd.Status = 0 And Now < expiration
  WScript.Sleep 100
Loop
If cmd.Status = 0 Then
  cmd.Terminate
  timedOut = True
End If

WScript.Echo  cmd.StdOut.ReadAll

If cmd.ExitCode <> 0 Then
  WScript.Echo "Command terminated with exit code " & cmd.ExitCode & "."
  WScript.Echo cmd.StdErr.ReadAll
  WScript.Quit 1
ElseIf timedOut Then
  WScript.Echo "Command timed out."
  WScript.Echo cmd.StdErr.ReadAll
  WScript.Quit 2
End If


Answer 2:

它可能不是最好的方法,但为我工作:

的Windows telnet命令可以节省使用-f参数在客户端的输出。 因此,你可以使用:

WshShell.SendKeys "telnet -f D:\output\telnet.out IP_ADDRESS"

在你的脚本的末尾,简单地处理telnet.out的内容



文章来源: capture command line output in vbscript