如何重定向或检索Powershell脚本运行的telnet进程的输出?

时间:2019-05-17 14:46:58

标签: powershell telnet vxworks

我正在运行一个Powershell脚本,该脚本启动telnet进程,该进程将在客户端计算机上连接并运行命令。客户端计算机的操作系统是VxWorks的个性化版本,我在telnet上使用的命令调用了计算机内部开发的工具:

mediaGet("gei",1)

我想检索代码的输出并记录下来。

我尝试在Powershell脚本上使用参数-NoNewWindow和-RedirectStandardOutput,但是它只会为我创建一个空文件,这意味着它无法检索输出。

这是Powershell脚本:

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}")

(此代码的信用转到该问题How to use a string variable as a telnet command in a vbscript?的选定答案)

这是代码的输出

mediaGet("gei",1)
> media: 12345
> up: 1000 full duplex

我想在文本文件的末尾添加以下行:

media: 12345
up: 1000 full duplex

我怎么到那里?

1 个答案:

答案 0 :(得分:1)

Komputer。

是的,我错过了其他问答环节的回复。很高兴看到您现在又收到了回复。

但是即使是在文本文件中,也可以在之后将其替换。

$TelnetData = @'
mediaGet("gei",1)
> media: 12345
> up: 1000 full duplex
'@ 
Clear-Host
$TelnetData -replace 'mediaGet|\("gei",1\)|> ', ''

# Results

media: 12345
up: 1000 full duplex

通常情况下,您也可以在写入文件时执行此操作。

但是,在重定向方面,常见的是

  

MS telnet不使用stdin / out。

所以,这样的方法……

  

要重定向telnet会话的输出,可以使用...

     

-f日志文件

     

...参数,然后将其导入变量中:

     

$ output =获取内容日志文件

...经常长大。

所以,也许这会让您到达想要的位置...

Start-Process -FilePath 'telnet.exe' -ArgumentList '162.100.10.10', '-f E:\Temp\log.txt'
[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}")

完成上述操作后,就可以通过Get-Content and / or Set-Content cmdlets.

使用上面的内容对它进行清理

当然,我无法访问您列出的IPA,也没有该MediaGet的功能,但是可以对具有telnet功能的站点进行快速测试。

Start-Process -FilePath 'telnet.exe' -ArgumentList 'www.cyberciti.biz 80', '-f E:\Temp\log.txt'
[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}")

# PowerShell Terminal output.

GAC    Version        Location                                                                                                                                 
---    -------        --------                                                                                                                                 
True   v4.0.30319     C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll 


# Telnet Window and text file content
Get-Content -Path 'E:\Temp\log.txt'

           HTTP/1.1 400 Bad Request
 Server: cloudflaree
 Date: Sat, 18 May 2019 08:39:59 GMTi
   Content-Type: text/html'Content-Type: text/html'

 Connection: close
 Connection: close

<html>
<head><title>400 Bad Request</title></head>e
  <body bgcolor="white">i
  <center><h1>400 Bad Request</h1></center>
  <center><h1>400 Bad Request</h1></center>
<hr><center>cloudflare</center>
</body>
</html>