如何在vbscript中将字符串变量用作telnet命令?

时间:2019-05-14 12:05:13

标签: windows powershell vbscript command telnet

我正在尝试运行Powershell脚本,该脚本将调用批处理脚本,该脚本将启动telnet会话并运行以下命令:

mediaGet("gei",1)

由于这个stackoverflow问题Is it possible to use a batch file to establish a telnet session, send a command and have the output written to a file?,我编写了两个脚本:

telnet.bat

start telnet.exe 162.100.10.10
cscript telnet.vbs

telnet.vbs

set OBJECT=WScript.CreateObject("WScript.Shell")
Dim cmd
cmd = "mediaGet("gei",1)
WScript.sleep 50 
OBJECT.SendKeys cmd
WScript.sleep 50 
OBJECT.SendKeys "{ENTER}" 
WScript.sleep 50 
OBJECT.SendKeys "exit{ENTER}" 
WScript.sleep 5000
OBJECT.SendKeys " "

但是,当我运行脚本时,vbs脚本无法读取变量cmd的字符串。所以我将其更改为:

cmd = "mediaGet" & chr(40) & chr(34) & "gei" & ",1" & chr(41)

但是,它仍然在telnet终端上这样输出:

mediaGet"gei",1

如何使它读取字符串变量中的括号? 如果脚本最终可以正常工作,是否有人知道如何将vbs脚本的输出保存到日志文件中?

1 个答案:

答案 0 :(得分:2)

我不知道什么是mediaget或它做什么(实际上我从未听说过),因此,我不会对此发表评论。

但是,通过PowerShell运行外部命令非常普遍并且有据可查。看到这些:

PowerShell: Running Executables

Execution of external commands in PowerShell done right

所有所说的...

如果使用powershell.exe控制台主机是一回事,但是您所要做的只是调用VBScript和cmd.exe项目。既然是这种情况,那为什么不只使用cmd.exe?

但是,PowerShell可以直接执行此操作,所以,为什么要对.bat和.vbs执行额外的步骤?

示例:粗略且未经测试,因为我无需下载和测试mediaget

Start-Process -FilePath 'telnet.exe' -ArgumentList '162.100.10.10'
[system.reflection.assembly]::loadwithpartialname("System.Windows.Forms")
$SendKeys = [System.Windows.Forms.SendKeys]
$sendkeys::SendWait('mediaGet gei,1')
Start-Sleep -Seconds .5
$sendkeys::SendWait("{ENTER}")
Start-Sleep -Seconds .5
$sendkeys::SendWait("exit{ENTER}")

您甚至可以使用.Net命名空间,用自己的代码替换Telnet。

新对象System.Net.Sockets.TcpClient

以这种方式调用...

新对象System.Net.Sockets.TcpClient('162.100.10.10',80)

您可以将其用于write your own module或从MS powershellgallery.com来使用。

快速的YouTube搜索显示,mediaget是Web下载工具。

如果您要访问的网站/ ftp站点下载文件,则也可以直接在PowerShell中进行。看到这个:

3 ways to download files with PowerShell