2012-11-21 113 views
2

我已經編寫了Perl腳本來自動化我的工作,使用telnet連接到Windows並啓動服務器。Perl windows telnet會話結束

#!/usr/bin/perl -w 

use Net::Telnet; 

$telnet = new Net::Telnet (Timeout=>30, Errmode=>'die'); 
$telnet->open('ip'); 
$telnet->waitfor('/login: $/i'); 
$telnet->print('admin'); 
$telnet->waitfor('/password: $/i'); 
$telnet->print('password'); 
$telnet->waitfor('/\C:\\\\Documents and Settings\\\\Administrator/'); 
$telnet->print('start server'); 
$telnet->close(); 

當程序結束時,服務器再次返回到非運行狀態。在Unix中,這個效果很好。

+0

你是什麼意思的'在Unix中,這很好'?你的意思是當腳本在Unix機器上執行,或者當你連接到Unix機器時? – Matteo

+0

是的......當我在unix中運行相同的代碼時,服務器在腳本結束時繼續運行。 – user1840969

回答

-1

如果您使用Microsoft Telnet Server,請注意編碼和控制字符存在問題。

documentation of Net::Telnet

連接到遠程MS-Windows計算機

默認MS-Windows不拿出一個TELNET服務器。然而,第三方TELNET服務器可用 。不幸的是,其中很多服務器虛假地聲稱是TELNET服務器。這是所謂的「微軟Telnet服務器」 特別真實 一些新版本MS-Windows安裝。

當TELNET服務器首次接受連接時,它必須使用ASCII 控制字符回車符和換行符開始新行 (請參閱RFC854)。不像 這樣的「微軟Telnet服務器」這樣的服務器,不是TELNET服務器。這些服務器發送ANSI終端 轉義序列以定位到後續行中的列,並在寫入其他字符時與其他位置相鄰的字符變爲 偶數位置。更糟糕的是,當發送輸出時,這些服務器重新發送先前發送的命令輸出,導致錯誤地嘗試顯示整個終端 屏幕。

將Net :: Telnet連接到這些錯誤的TELNET服務器之一會使得您的 解析命令輸出工作非常困難。最好用一個真正的TELNET服務器替換一個虛假的TELNET服務器 。用於MS-Windows的更好的TELNET 服務器允許您通過將 關閉某些調用控制檯模式的東西來避免ANSI轉義。

+0

所以沒有其他辦法啓動遠程機器的服務器?視窗?在$ telnet-> close();之後加上$ – user1840969

+0

。服務器返回到舊狀態(未運行)。 我希望服務器正在運行,即使程序結束。 – user1840969