2017-10-10 2 views
-2

Ceci est un script pour simuler des réponses d'une machine, mon problème est que "WaitForStrings" dosent faire la différence entre "open" et "open1" ou "close" et "close1", il répond toujours à "ouvrir" et "fermer"secureCRT VBS en utilisant WaitForStrings() et Switch Case

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

Alors, que voulez-vous que nous fassions? Nous ne pouvons pas changer le comportement de la méthode 'WaitForStrings()', essayez peut-être '" 1open "' et '" 1close "' à la place et voyez s'il le reconnaît. Vous avez juste besoin de travailler avec la limitation et de trouver un moyen de contourner cela. – Lankymart

+0

c'est le problème que je ne peux pas changer la chaîne attendue ... – idan357

+0

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

Répondre

0

pourrait être pertinent

de A Guide to Using VBScript in SecureCRT - Page 41 (excerpt)
Évitez « manquant » données avec Screen.Synchronous = True

Afin d'éviter les risques de WaitForString() et ses méthodes connexes manquer des données est envoyé à partir de la télécommande tout autre code dans votre script est exécuté, il est important de connaître la propriété Synchronous associée à l'objet Screen. Vous pouvez avoir vu Screen.Synchronous = True déclarations apparaissent dans certains de l'exemple de code que vous avez vu plus tôt dans ce document; Cette section tente d'expliquer quand il serait important d'utiliser ces instructions dans votre code.

...

Si votre code de script semble être données « manquantes » qui apparaît à l'écran, vérifiez votre code et assurez-vous que la propriété Synchronous de l'objet Screen avec lequel vous êtes le travail est mis à True. Sachez cependant que la mise en Screen.Synchronous-True peut sembler avoir un impact sur la performance de SecureCRT, car les données ne seront pas affichées à l'écran jusqu'à ce que les appels à WaitForString, WaitForStrings, ReadString ou WaitForCursor sont faits. Pour exemple, le code de script suivant entraînera une connexion réussie à l'hôte distant, mais rien ne sera affiché à la fenêtre du terminal depuis le script est en boucle pour toujours (sans faire des appels à ReadString, WaitForString, WaitForStrings ou WaitForCursor).