سؤال

أحاول القيام ببعض البرمجة النصية الأساسية باستخدام Ruby لتسجيل الدخول إلى جهاز Windows عبر Telnet وسحب بعض الملفات عبر استخدام خط الأمر DOS FTP. عندما أفعل هذا يدويا يدويا، فإن كل شيء يذهب إلى Swimmly ولكن عندما أحاول ذلك عبر Ruby، أحصل على خطأ في مكالمة تسجيل الدخول.

هنا هو برنامج الاختبار الخاص بي بالكامل:

require 'net/telnet'
tn = Net::Telnet::new("Host"=>"xxx.xxx.xxx.xxx", "Timeout"=>25, "Output_log"=>"output_log.log", "Dump_log"=> "dump_log.log", "Prompt"=>"C:.*>")
tn.login("administrator", "xxxxxxx") {}
tn.cmd('dir')
exit

محتويات الإخراج_log لا تخون أي شيء مخطئ:

Trying 208.10.202.187...
Connected to 208.10.202.187.
Welcome to Microsoft Telnet Service 
login: administrator
password: 
*===============================================================
Welcome to Microsoft Telnet Server.
*===============================================================
C:\Documents and Settings\Administrator>

نفس الشيء بالنسبة ل DUMP_LOG الذي يحتوي على محتويات مشابهة للغاية ولكنه منسق محرجا. عندما أقوم بتشغيل البرنامج، فهناك منذ فترة، ثم يخرج الخطأ التالي:

PS C:\code\tools\deployment> ruby test.rb
C:/Ruby/lib/ruby/1.8/net/telnet.rb:551:in `waitfor': timed out while waiting for more data (Timeout::Error)
        from C:/Ruby/lib/ruby/1.8/net/telnet.rb:685:in `cmd'
        from C:/Ruby/lib/ruby/1.8/net/telnet.rb:730:in `login'
        from test.rb:3

مما يدفعني إلى المشكوك في أن فئة Telnet لا تتعرف على موجه الأوامر. لقد جربت العديد من سلاسل Regex مختلفة لمعلمة سريعة، بما في ذلك الافتراضي ويبدو أن لا شيء يساعد.

هل كانت مفيدة؟

المحلول

أعتقد أن الحقل الفوري يحتاج إلى يكون regexp، وليس سلسلة محاولة

tn = Net::Telnet::new("Host"=>"xxx.xxx.xxx.xxx", "Timeout"=>25,
"Output_log"=>"output_log.log", "Dump_log"=> "dump_log.log",
"Prompt"=> /C:.*>/)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top