如何在 vbscript 中使用字符串变量作为 telnet 命令?
Posted
技术标签:
【中文标题】如何在 vbscript 中使用字符串变量作为 telnet 命令?【英文标题】:How to use a string variable as a telnet command in a vbscript? 【发布时间】:2019-10-01 10:59:57 【问题描述】:我正在尝试运行一个 Powershell 脚本,该脚本将调用一个批处理脚本,该脚本将启动一个 telnet 会话并运行以下命令:
mediaGet("gei",1)
感谢这个***问题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 "exitENTER"
WScript.sleep 5000
OBJECT.SendKeys " "
但是,当我运行脚本时,vbs 脚本无法读取变量 cmd 的字符串。所以我把它改成了这样:
cmd = "mediaGet" & chr(40) & chr(34) & "gei" & ",1" & chr(41)
但是,它仍然在 telnet 终端上这样输出:
mediaGet"gei",1
如何让它读取字符串变量中的括号? 如果脚本最终可以工作,有谁知道如何将 vbs 脚本的输出保存到日志文件中?
【问题讨论】:
【参考方案1】:我不知道 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("exitENTER")
您甚至可以使用 .Net 命名空间将 Telnet 替换为您自己的代码。
新对象 System.Net.Sockets.TcpClient
这样称呼它...
New-Object System.Net.Sockets.TcpClient('162.100.10.10', 80)
您可以将其用于write your own module 或使用来自 MS 的此powershellgallery.com。
在 YouTube 上的快速搜索表明 mediaget 是一种网络下载工具。
如果您所做的只是访问网站/ftp 站点以下载文件,您也可以直接在 PowerShell 中执行此操作。看到这个:
3 ways to download files with PowerShell
【讨论】:
我没有意识到可以直接在 PS 上完成。感谢您提供的信息丰富且很有帮助的回复。 mediaGet 原来是我正在使用的机器上内部开发的工具。发布问题时我没有意识到这一点。此工具会返回双工状态,其格式类似于:“media = 1234566, up: 1000 full duplex”。它在 telnet shell 上返回,我想在我的 Powershell 终端上检索该结果。 我注意到一个奇怪的事情是当输入 SendWait('mediaGet gei,1') 时,telnet shell 只将该命令读取为“diaGet gei,1”。所以我必须输入 '(space)(space)mediaGet gei,1' 才能正确读取命令。它以某种方式忽略了前两个字符,但我不知道为什么。 我已经尝试添加参数 -NoNewWindow 和 -RedirectStandardOutput 但两者都不起作用。我仍然无法将输出结果检索到我的 Powershell 终端中。你知道怎么做吗?提前致谢。以上是关于如何在 vbscript 中使用字符串变量作为 telnet 命令?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 VBScript 中使用正则表达式替换部分子字符串?
如何从 cmd 获取变量并在 vbscript 中显示 - Vbscript