Unerwartetes Verhalten in VBScript mit SendKeys

481
G_Hosa_Phat

Ich versuche, ein VBScript zu erstellen, das von einer geplanten Task ausgeführt werden kann, um die SonicWall-Firewall neu zu starten. Die Firewall ist ein "unteres" Geschäftsmodell (TZ400), und ich muss sie regelmäßig neu starten, da unsere Internetverbindung scheinbar blockiert ist (dies ist ein anderes Problem, das ich später untersuchen muss).

Ich habe den folgenden Code auf einer anderen Website gefunden plink.exeund für meine Umgebung geändert:

Set sw= CreateObject("WScript.Shell") sw.run"C:\plink\path\Plink.exe -ssh adminuser@X.X.X.X -pw adminpassword" WScript.Sleep 500  sw.SendKeys "restart" sw.SendKeys "" WScript.Sleep 800  sw.SendKeys "yes" sw.SendKeys "" WScript.Sleep 10000  sw.SendKeys "exit" sw.SendKeys "" 

Wenn ich dieses Skript ausführte, scheint es leider, dass einige der Zeichen der SendKeysMethodenaufrufe übersprungen werden. Wenn ich es von meinem Computer (Windows 7) aus laufe, kann ich normalerweise "genug" Zeichen übergeben, um den Vorgang abzuschließen, aber wenn ich versuche, dasselbe Skript auf dem Server auszuführen (Windows Server 2008 R2 - ich habe verbunden durch RDP), geht es völlig durcheinander. In der Abbildung unten sehen Sie ein Beispiel nach einem besonders "falschen" Versuch.

Plink-Sitzung von VBScript

Ich habe versucht, eine Verzögerung zwischen den Befehlen und den entsprechenden Befehlen zu setzen , aber das scheint es nur zu verschlimmern. Ich habe versucht, den Text in Klammern einzufügen, nur für den Fall, dass er etwas mit der Syntax des Methodenaufrufs zu tun hatte, aber das half auch nicht.

Soweit ich das beurteilen kann, scheint es, dass die Eingabeaufforderung SendKeysaus irgendeinem Grund einfach nicht mit der Methode mithalten kann . Hat jemand anderes dieses Problem erlebt und hat jemand einen Vorschlag, wie er am besten vermieden oder umgangen werden kann? Gibt es beispielsweise eine Möglichkeit, die Ausführung des Skripts auf irgendeine Weise zu verlangsamen? Vielen Dank im Voraus für alle Vorschläge.


BEARBEITEN: Ich konnte das Skript erfolgreich auf dem Server ausführen, indem ich das Skript so veränderte, dass jedes Zeichen separat mit einem Ruhezustand von 100 ms zwischen ihnen gesendet wird:

Set sw= CreateObject("WScript.Shell") sw.run"C:\plink\path\Plink.exe -ssh adminuser@X.X.X.X -pw adminpassword" WScript.Sleep 500  sw.SendKeys "r" WScript.Sleep 100 sw.SendKeys "e" WScript.Sleep 100 sw.SendKeys "s" WScript.Sleep 100 sw.SendKeys "t" WScript.Sleep 100 sw.SendKeys "a" WScript.Sleep 100 sw.SendKeys "r" WScript.Sleep 100 sw.SendKeys "t" WScript.Sleep 100 sw.SendKeys "" WScript.Sleep 800  sw.SendKeys "y" WScript.Sleep 100 sw.SendKeys "e" WScript.Sleep 100 sw.SendKeys "s" WScript.Sleep 100 sw.SendKeys "" WScript.Sleep 10000  sw.SendKeys "e" WScript.Sleep 100 sw.SendKeys "x" WScript.Sleep 100 sw.SendKeys "i" WScript.Sleep 100 sw.SendKeys "t" WScript.Sleep 100 sw.SendKeys ""  wScript.quit 

Diese Problemumgehung scheint zwar zu funktionieren, scheint jedoch etwas "brutal" zu sein und löst das eigentliche Problem nicht wirklich auf, so dass ich immer noch an Gedanken oder Vorschlägen interessiert bin.

ANMERKUNG: Während ich das VBScript zwar manuell über die Befehlszeile ausführen kann, gibt es immer noch Probleme, wenn es von der geplanten Aufgabe ausgeführt wird. Es scheint zu beginnen und zu enden, aber die Firewall wird nie neu gestartet. Nichtsdestotrotz ... Ich weiß, warum es nicht von der geplanten Aufgabe ausgeführt wird, und ich muss mir ein besseres Skript überlegen, um diese bestimmte Operation auszuführen.

1
Vielen Dank für den Vorschlag, aber ich habe es in meiner Frage ohne Erfolg versucht. Auch wenn Sie den Screenshot beachten, können sich die "fehlenden" Zeichen in der Mitte des Wortes befinden (`restat` anstelle von` restart` - das letzte `r 'fehlt, jedoch nicht das letzte' t'-Zeichen), was leider der Fall ist würde nicht gelöst werden, indem gewartet wird, nachdem der Befehl gesendet wurde. G_Hosa_Phat vor 6 Jahren 0
Ah, das muss ich mir angesehen haben. . . Ich nehme an, ein sw.AppActivate "% WinTitle%" zu machen, wobei "% WinTitle%" der tatsächliche Wert des Plink-Fenstertitels zuerst nach dem Verbinden ist und vor dem Einfügen der Sendkeys nichts helfen würde? Wenn nicht, frage ich mich, ob die SSH-Sitzung verzögert wird und die Verwendung von Sendkeys nicht an das Terminal gesendet wird oder was auch immer, wenn eine Verzögerung vorliegt. Pimp Juice IT vor 6 Jahren 1
Ich habe das nicht ausprobiert, aber ich kann es sicherlich versuchen, wenn ich morgen wieder im Büro bin. G_Hosa_Phat vor 6 Jahren 0
Ja, keine Sorge, ich habe schon einige Skripte geschrieben, die Sendkey-Funktionen mit Batch und sogar einige mit PowerShell für den Fall, dass Sie Hilfe benötigen, hier eine Liste: https://superuser.com/search?tab=newest&q=user%3a510662%20body % 3a% 20sendkeys können jederzeit stöbern und stöbern, falls irgendwelche hilfreich sind, nehme ich an. Pimp Juice IT vor 6 Jahren 1
Schauen Sie sich diesen Beitrag für den Fall an, dass er beim Neustartproblem mindestens hilfreich ist: https://www.sonicwall.com/de-de/support/knowledge-base/170502775276425 Pimp Juice IT vor 6 Jahren 1

0 Antworten auf die Frage