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

How to use a string variable as a telnet command in a vbscript?

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

mediaGet("gei",1)

感谢这个 Whosebug 问题 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 脚本的输出保存到日志文件中?

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

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

PowerShell: Running Executables

Execution of external commands in PowerShell done right

话虽如此...

如果您使用 powershell.exe consolehost 那是一回事,但您所做的只是调用 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 替换为您自己的代码。

New-Object System.Net.Sockets.TcpClient

这样称呼...

New-Object System.Net.Sockets.TcpClient('162.100.10.10', 80)

你可以用它来 write your own module or use this one from the MS powershellgallery.com

通过快速搜索 YouTube,我发现 mediaget 是一种网络下载工具。

如果您所做的只是访问网站/ftp 站点以下载文件,您也可以直接在 PowerShell 中执行此操作。看到这个:

3 ways to download files with PowerShell