我正在尝试运行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?,我编写了两个脚本:
start telnet.exe 162.100.10.10
cscript 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脚本的输出保存到日志文件中?
答案 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中进行。看到这个: