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

How to redirect or retrieve the output of a telnet process ran by a Powershell script?

我正在 运行 启动一个 telnet 进程的 Powershell 脚本,该进程将连接到客户端计算机和 运行 一个命令。客户端机器的操作系统是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}")

(此代码的学分转到此问题的选定答案

这是代码的输出

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

我想要一个包含以下行的文本文件:

media: 12345
up: 1000 full duplex

我怎样才能到达那里?

电脑。

是的,我错过了在其他问答中回复你的机会。很高兴看到您现在收到回复。

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

$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 doesn't use stdin/out.

所以,像这样的方法......

For redirecting the output of a telnet session you can use the ...

-f logfile

...argument and then importing it into a variable after you are done with it:

$output = get-contents logfile

...经常被提起

所以,也许这会让你到达你想去的地方......

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

完成上述操作后,您就可以 运行 上面的 clean-up,使用我上面的内容,通过 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>