如何在 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 中执行此操作。看到这个:
我正在尝试 运行 一个 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 中执行此操作。看到这个: