【问题标题】:How to get telnet output on PowerShell?如何在 PowerShell 上获取 telnet 输出?
【发布时间】:2013-06-01 10:47:59
【问题描述】:

我想我可以在 PowerShell 上运行如下命令。

$output = & echo quit | telnet localhost 22
echo $output

然而, $output 里面什么都没有。 我正在尝试验证 ssh 或 telnet 连接。

你能告诉我如何从上面的命令中获取输出吗?

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    这是不可能的。 MS telnet 不使用标准输入/输出。见这里:C# + telnet process w/ redirected standard streams quits immediately

    要重定向 telnet 会话的输出,您可以使用 -f logfile 参数,然后在完成后将其导入变量:$output = get-contents logfile

    要向 telnet 发送键盘命令,您可以使用 $wshell = new-object -com wscript.shell 然后:

    start-process telnet -argumentlist "-f w:\tmp\log.txt"; 
    sleep 1; 
    $wshell.SendKeys("quit{ENTER}")
    

    是的,我知道...不是您所期望的,但这是使用 MS 内置 telnet 控制台的唯一方法。如果您知道任何更好的方法,我会很高兴听到。

    如果您只想检查打开的端口,那么为什么不直接查询它们而不是远程登录呢?见here

    【讨论】:

      【解决方案2】:

      试图调整它以收集来自 APC PDU 的 Telnet 输出(读取当前负载)。成功输入指定的键并在 telnet 会话窗口中生成输出,但是一旦 telnet 会话结束,该窗口不会关闭。它保持打开状态并显示“与主机的连接丢失。”

      我可以按任意键关闭窗口,但是 PS 脚本没有继续执行,所以 SendKeys 语句后面的代码没有被执行。

      我错过了一些简单的东西吗?代码如下。

      $wshell = new-object -com wscript.shell
      start-process telnet -argumentlist "pdu1-a6.domain.local -f c:\temptelnet.log"
      sleep 1
      $wshell.SendKeys("username{ENTER}password{ENTER}current{ENTER}quit{ENTER}")
      $telnetoutput = get-content c:\temptelnet.log
      $telnetoutput
      

      【讨论】:

        【解决方案3】:

        试试这个脚本并在你的命令开始和结束时添加它来捕获每个日志

        $ipV4 = (Test-Connection -ComputerName (hostname) -Count 1).IPV4Address.IPAddressToString -- this 
        
        Start-Transcript -Path .\TraceLogs_$ipV4.txt
        
        <**Add your code here**>
        
        Stop-Transcript
        

        这里 $ipV4 将捕获源主机并生成日志作为文件名 .\TraceLogs_$ipV4.txt

        【讨论】:

          猜你喜欢
          • 2011-07-15
          • 2016-04-30
          • 2015-02-22
          • 2021-04-04
          • 2012-05-10
          • 1970-01-01
          • 2019-09-01
          • 2011-01-15
          • 2018-02-14
          相关资源
          最近更新 更多