powershell - 如何重定向或检索由 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
我如何到那里?
解决方案
电脑。
是的,我错过了在其他问答中回复你。很高兴看到您现在收到回复。
但即使那是在文本文件中,你也可以在之后替换它。
$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>
推荐阅读
- html - 无法找到带有硒的html元素
- html - 您如何使徽标文本与徽标相匹配
- dialogflow-es - 在 DialogFlow 中添加对知识库的附加链接响应
- python - 使用来自其他带有字符串的列的条件创建新列
- php - 是否可以有一个具有两个提交按钮的表单,这些按钮可以转到单独的表单处理页面?
- keras - 类激活图偏移
- python - 如何将图像区域转换为白色或透明?
- xamarin.forms - 如何在 Xamarin.Forms 中正确绑定视图模型中的地图/引脚?
- c# - MongoDb C# 驱动程序 - DeleteMany 不适用于 In Filter
- javascript - javascript切换隐藏/显示不适用于多个显示值