secureCRT VBS с использованием WaitForStrings() и Switch Case

Это скрипт для имитации ответов от компьютера, моя проблема в том, что "WaitForStrings" не различают "open" и "open1" или "close" и "close1", он всегда отвечает "open" и "close"

firstopen=true
while(true)
 strResult = crt.Screen.WaitForStrings("open1","close1","open","close","SCAN")
 Select Case strResult
  Case 1
   crt.Sleep 500
   crt.Screen.Send("open1_ok") & chr(13)
  Case 2
   crt.Sleep 500
   crt.Screen.Send("close1_ok") & chr(13)

  Case 3
   If firstopen=true then
    crt.Sleep 500
    crt.Screen.Send("open_ok") & chr(13) 
    firstopen=false
   else
    crt.Sleep 500
    crt.Screen.Send("ok") & chr(13)
    firstopen=true
   end if 
  Case 4
  crt.Sleep 500
  crt.Screen.Send("ready") & chr(13)

  Case 5
  crt.Sleep 500
  crt.Screen.Send("CCD_PASS") & chr(13)
  
  Case Else
  crt.Screen.Dialog "We didn't find what we were looking for"
 
 End Select
wend

1 ответ

Может быть актуальным

Из Руководства по использованию VBScript в SecureCRT - Страница 41 (отрывок)
Избегайте пропущенных данных с Screen.Synchronous = True

Во избежание потенциального WaitForString() и связанные с ним методы пропуска данных, отправляемых с удаленного устройства во время выполнения другого кода в вашем скрипте, важно знать о Synchronous свойство, связанное с Screen объект. Возможно, вы видели Screen.Synchronous = True операторы появляются в некотором примере кода, который вы видели ранее в этом документе; этот раздел пытается объяснить, когда было бы важно использовать такие операторы в вашем коде.

...

Если в вашем коде сценария "отсутствуют" данные, отображаемые на экране, проверьте код и убедитесь, что Synchronous собственность Screen объект, с которым вы работаете, установлен на True , Имейте в виду, однако, что настройка Screen.Synchronous в True может показаться, что это влияет на производительность SecureCRT, потому что данные не будут отображаться на экране, пока вызовы WaitForString , WaitForStrings , ReadString , или же WaitForCursor сделаны. Например, следующий код скрипта приведет к успешному соединению с удаленным хостом, но в окне терминала ничего не будет отображаться, так как скрипт работает постоянно (без каких-либо вызовов ReadString , WaitForString , WaitForStrings , или же WaitForCursor ).

Попробуйте ввести в вашу третью строковую команду следующую строку:

strResult = crt.Screen.WaitForStrings(["open1","close1","open","close","SCAN"])

Надеюсь, это поможет!!

Другие вопросы по тегам