使用WaitForStrings()和Switch Case的secureCRT VBS

问题描述:

这是一个模拟机器答案的脚本,我的问题是“WaitForStrings”dosent区分“open”和“open1”或“close”和“close1”,他总是回答 “打开” 和 “关闭”使用WaitForStrings()和Switch Case的secureCRT VBS

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

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

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

+1

那么你想让我们做什么?我们不能改变'WaitForStrings()'方法的行为,也许可以尝试'“1open”'和'“1close”',看看它是否可以识别。你只需要处理这个限制并找到解决方法。 – Lankymart

+0

这是我不能改变预期字符串的问题... – idan357

+0

是['Screen.Synchronous = True'](https://*.com/a/46668176/692942)? – Lankymart

可能是相关的

A Guide to Using VBScript in SecureCRT - Page 41 (excerpt)
避免“丢失”的数据与Screen.Synchronous = True

为了避免WaitForString()和错过的数据 从远程发送的潜力及其相关的方法,而你的脚本中的其他代码正在执行时, 知道与Screen对象关联的Synchronous属性很重要。您可能会看到 看到Screen.Synchronous = True语句出现在您在本文档前面看到的一些示例代码 中;本节试图解释在您的代码中何时使用这些语句的时间是重要的 。

...

如果你的脚本代码似乎“失踪”的屏幕上显示的数据,检查你的代码 并确保Screen对象的Synchronous属性与你工作是 设置为True。 注意,但是,该设置Screen.SynchronousTrue可似乎对SecureCRT的性能产生影响,因为 数据将不会被显示在屏幕上,直到调用 WaitForStringWaitForStringsReadStringWaitForCursor制成。对于 例如,下面的脚本代码将导致成功连接到远程主机,但 什么都不会被显示在终端窗口因为脚本是永远循环(没有 进行任何呼叫ReadStringWaitForStringWaitForStrings,或WaitForCursor )。