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 は stdin/out を使用しません。こちらを参照してください:リダイレクトされた標準ストリームを使用する C# + telnet プロセスはすぐに終了します
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コンソールを使用する唯一の方法です。何か良い方法をご存知でしたら、教えていただけると幸いです。
開いているポートのみを確認したい場合は、telnet の代わりにクエリを実行してみませんか? ここを参照してください。
これを 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