Неожиданное поведение в VBScript с SendKeys

337
G_Hosa_Phat

Я пытаюсь создать VBScript, который я могу запустить из запланированной задачи, чтобы перезапустить наш брандмауэр SonicWall. Брандмауэр - это бизнес-модель «более низкого уровня» (TZ400), и мне периодически приходится его перезагружать, потому что наше интернет-соединение, похоже, зависло (это еще одна проблема, которую мне придется исследовать позже).

На другом сайте я нашел следующий код для использования plink.exeи изменил его для своей среды:

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 "" 

К сожалению, когда я запускаю этот скрипт, он, кажется, пропускает некоторые символы из SendKeysвызовов методов. Если я запускаю его со своего компьютера (Windows 7), я обычно могу передать ему «достаточно» символов для завершения операции, но когда я пытаюсь запустить тот же сценарий на сервере (Windows Server 2008 R2 - подключен через RDP), он выходит полностью из строя. Смотрите скриншот ниже для примера после одной особенно «неправильной» попытки.

plink session from VBScript

Я пытался поместить задержку между каждой из команд и ее соответствием , но это только ухудшает ситуацию. Я попытался заключить текст в круглые скобки на тот случай, если он как-то связан с синтаксисом вызова метода, но это тоже не помогло.

Из того, что я могу сказать, кажется, что командная строка просто не в состоянии «поспевать» за SendKeysметодом по какой-то причине. Кто-нибудь еще сталкивался с этой проблемой, и есть ли у кого-нибудь предложение для лучшего способа избежать или обойти это? Например, есть ли способ каким-то образом «замедлить» выполнение скрипта? Спасибо заранее за любые предложения.


РЕДАКТИРОВАТЬ: я был в состоянии заставить сценарий успешно выполняться на сервере, изменив сценарий для отправки каждого символа в отдельности с 100 мс сна между ними:

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 

Хотя этот обходной путь, кажется, работает, он кажется немного «грубым» и на самом деле не решает проблему, лежащую в основе, поэтому я все еще интересуюсь любыми мыслями или предложениями.

ПРИМЕЧАНИЕ. Хотя это позволяет мне запускать VBScript вручную из командной строки, у меня все еще возникают проблемы с его запуском из запланированной задачи. Кажется, он запускается и заканчивается, но на самом деле брандмауэр никогда не перезапускается. Не важно ... Я знаю, почему он не запускается из запланированной задачи, и мне нужно будет придумать лучший сценарий для выполнения этой конкретной операции.

1
Спасибо за предложение, но, как я уже сказал в своем вопросе, я попробовал это безуспешно. Также, если вы заметите скриншот, «пропущенные» символы могут быть в середине слова («restat» вместо «restart» - пропускает последний `r`, но не последний` t` символ), что, к сожалению, , не будет решена путем ожидания после отправки команды. G_Hosa_Phat 5 лет назад 0
Ах, я, должно быть, посмотрел это. , , Я полагаю, что выполнение `sw.AppActivate"% WinTitle% "`, где `% WinTitle%` - это фактическое значение заголовка окна plink, сначала после подключения и перед замазкой в ​​sendkeys, не поможет? Если нет, то мне интересно, если сессия SSH запаздывает и использование sendkeys просто не отправляется на терминал или что-то еще, когда есть задержка. Pimp Juice IT 5 лет назад 1
Я не пробовал этого, но я, конечно, могу дать ему шанс, когда завтра вернусь в офис. G_Hosa_Phat 5 лет назад 0
Да, не беспокойтесь, я написал довольно много сценариев, использующих функции sendkey с пакетной обработкой и даже некоторые с PowerShell, если есть какая-либо помощь, вот список: https://superuser.com/search?tab=newest&q=user%3a510662%20body % 3a% 20sendkeys не стесняйтесь просматривать и ковыряться в случае, если какие-либо полезны, я полагаю. Pimp Juice IT 5 лет назад 1
Прочтите этот пост на случай, если это поможет решить проблему перезагрузки, по крайней мере: https://www.sonicwall.com/en-us/support/knowledge-base/170502775276425 Pimp Juice IT 5 лет назад 1

0 ответов на вопрос