如何通过 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>
我正在 运行 启动一个 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>