【问题标题】:How to use a string variable as a telnet command in a vbscript?如何在 vbscript 中使用字符串变量作为 telnet 命令?
【发布时间】:2019-10-01 10:59:57
【问题描述】:

我正在尝试运行一个 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 脚本的输出保存到日志文件中?

【问题讨论】:

    标签: windows powershell vbscript command telnet


    【解决方案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("exit{ENTER}")
    

    您甚至可以使用 .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 终端中。你知道怎么做吗?提前致谢。
    猜你喜欢
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 2018-11-05
    相关资源
    最近更新 更多