捕获vbscript中的命令行输出

时间:2013-05-15 09:18:24

标签: windows command-line vbscript

有一个简单的脚本执行命令到服务器 - 简要说明:

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

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

服务器提供我想要捕获的反馈。我只需要将第一行捕获到变量中,然后将该变量打印出来进行确认。

你能帮忙吗?感谢。

2 个答案:

答案 0 :(得分:0)

请勿将Windows telnet客户端用于自动化目的。 Windows附带的telnet客户端仅供交互使用。

我在批处理模式下使用plink(来自PuTTY suite):

plink.exe -telnet -batch IP_ADDRESS dir

该工具不需要安装,因此您只需将其与脚本一起部署即可。

使用head/tail在批处理文件中运行,或使用Exec方法在VBScript中运行,以便read from 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

答案 1 :(得分:0)

这可能不是最好的方法,但对我有用:

Windows telnet命令可以使用-f参数在客户端保存输出。因此,您可以使用:

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

并在脚本结束时,只需处理telnet.out

的内容