批量获取多台主机FileZilla Server版本的Telnet实现及输出捕获问题求助
我现在需要批量远程查询大量主机上安装的FileZilla Server版本号。
我知道如果用Telnet连接到FZ服务器,会收到一条包含版本信息的响应,之后连接会一直挂着,得用quit命令、Ctrl+C或者直接终止进程才能断开。
我的目标是遍历服务器列表,给每台主机建立Telnet连接,把带版本号的响应信息记录到文件里。如果有更优雅的方法能拿到这个信息,我完全愿意尝试——目前这是我能想到的最好方案了。
我搜过不少相关解决方案,但大部分场景只需要检查服务器是否在线,用Test-Connection这类命令就够了,和我的需求不太匹配。
说说我目前的尝试:
- 用plink(PuTTY的命令行客户端)作为可脚本化的Telnet工具
- 用PowerShell写脚本(我比Windows CMD更熟悉PowerShell,但也接受其他语言的解决方案)
我现在最核心的问题是没法把plink的响应内容保存下来。Plink连接时会新开一个会话,我怎么都没法把输出内容存到主脚本的日志文件里(甚至根本存不下来)。
比如我用这条命令启动plink会话:
Start-Process 'plink.exe' -ArgumentList '-telnet', '$IP', '-P', '$PORT'
能正常得到这样的响应:
220-FileZilla Server version 0.9.43 beta
220-written by Tim Kosse (Tim.Kosse@gmx.de)
220 Please visit http://sourceforge.net/projects/filezilla/
但换成下面这条命令,却完全没法把内容输出到文件里。我试过用2>和3>,猜测是不是输出到错误流或者其他特殊流了,但都没用——生成的文件永远是空的:
Start-Process 'plink.exe' -ArgumentList '-telnet', '$IP', '-P', '$PORT' > C:\Temp\testps2.txt
我现在有点懵,要么是我漏掉了某个超简单的细节,要么就是这事看起来原理简单,但实际做起来特别复杂。
本来下一步是要实现连接打开(并捕获到信息)后自动关闭会话,但现在连信息都抓不到,根本没心思往下推进。
非常感谢任何帮助和思路,我现在真的有点一筹莫展了。
备注:内容来源于stack exchange,提问作者Oddthetall

