我正在尝试运行一个Powershell脚本,该脚本将调用一个批处理脚本,该脚本将启动telnet会话并运行以下命令:
mediaGet("gei",1)
由于这个堆栈溢出问题,是否可以使用批处理文件来建立telnet会话、发送命令并将输出写入文件?,我编写了两个脚本:
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脚本的输出保存到日志文件中?
发布于 2019-05-14 15:46:27
我不知道什么是媒体,也不知道它的作用(实际上我从未听说过),所以,我不会对此发表评论。
但是,通过PowerShell运行外部命令是非常常见的,并且有很好的文档记录。见以下内容:
所有这些都是..。
如果您正在使用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)
您可以将它用于编写自己的模块,也可以使用MS powershellgallery.com中的这个。
一个快速的YouTube搜索向我展示了媒体是一个网络下载工具。
如果您所做的只是访问一个网站/ ftp站点来下载一个文件,那么您也可以在PowerShell中直接这样做。见此:
https://stackoverflow.com/questions/56130037
复制相似问题