【发布时间】:2013-06-01 10:47:59
【问题描述】:
我想我可以在 PowerShell 上运行如下命令。
$output = & echo quit | telnet localhost 22
echo $output
然而, $output 里面什么都没有。 我正在尝试验证 ssh 或 telnet 连接。
你能告诉我如何从上面的命令中获取输出吗?
【问题讨论】:
我想我可以在 PowerShell 上运行如下命令。
$output = & echo quit | telnet localhost 22
echo $output
然而, $output 里面什么都没有。 我正在尝试验证 ssh 或 telnet 连接。
你能告诉我如何从上面的命令中获取输出吗?
【问题讨论】:
这是不可能的。 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。
【讨论】:
试图调整它以收集来自 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
【讨论】:
试试这个脚本并在你的命令开始和结束时添加它来捕获每个日志
$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
【讨论】: