我正在运行一个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
我怎么到那里?
答案 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>