以vbscript捕获命令行输出

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

//Create shell set WshShell=CreateObject("WScript.Shell") WshShell.run "cmd.exe" //send commands WshShell.SendKeys "telnet IP_ADDRESS" WshShell.Sendkeys "dir" 

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

你能帮我吗? 谢谢。

Solutions Collecting From Web of "以vbscript捕获命令行输出"

不要将Windows telnet客户端用于自动化目的。 Windows附带的telnet客户端仅用于交互式使用。

我会在批处理模式下使用plink (来自PuTTY套件 )来执行此操作:

 plink.exe -telnet -batch IP_ADDRESS dir 

该工具不需要安装,所以您可以简单地将其与您的脚本一起部署。

使用head / tail在批处理文件中运行它,或者使用Exec方法在VBScript中运行它,以便您可以从StdOut读取 :

 addr = "62.39.xx" 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 

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

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

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

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