首页 > 解决方案 > 如何重定向或检索由 Powershell 脚本运行的 telnet 进程的输出?

问题描述

我正在运行一个 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

我如何到那里?

标签: powershelltelnetvxworks

解决方案


电脑。

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

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

$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 不使用标准输入/输出。

所以,像这样的方法……</p>

要重定向 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 和/或 Set-Content cmdlet 对其进行清理。

当然,我无法访问您列出的 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>

推荐阅读