Я пытаюсь создать 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 "{Enter}"
WScript.Sleep 800
sw.SendKeys "yes"
sw.SendKeys "{Enter}"
WScript.Sleep 10000
sw.SendKeys "exit"
sw.SendKeys "{Enter}"
К сожалению, когда я запускаю этот скрипт, он пропускает некоторые символы из вызовов метода SendKeys
. Если я запускаю его со своего компьютера (Windows 7), я обычно могу передать ему "достаточно" символов для завершения операции, но когда я пытаюсь запустить тот же сценарий на сервере (Windows Server 2008 R2 - подключен через RDP), он выходит полностью из строя. Смотрите скриншот ниже для примера после одной особенно "неправильной" попытки.
Я попытался поместить задержку между каждой из команд и соответствующей ей клавишей {ENTER}
, но это только ухудшает ситуацию. Я попытался заключить текст в круглые скобки на тот случай, если он как-то связан с синтаксисом вызова метода, но это тоже не помогло.
Из того, что я могу сказать, кажется, что командная строка просто не в состоянии "поспевать" за методом 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 "{Enter}"
WScript.Sleep 800
sw.SendKeys "y"
WScript.Sleep 100
sw.SendKeys "e"
WScript.Sleep 100
sw.SendKeys "s"
WScript.Sleep 100
sw.SendKeys "{Enter}"
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 "{Enter}"
wScript.quit
Хотя этот обходной путь, кажется, работает, он кажется немного «грубым» и на самом деле не решает проблему, лежащую в основе, поэтому я все еще интересуюсь любыми мыслями или предложениями.
ПРИМЕЧАНИЕ. Хотя это позволяет мне запускать VBScript вручную из командной строки, у меня все еще возникают проблемы с его запуском из запланированной задачи. Кажется, он начинается и заканчивается, но на самом деле брандмауэр никогда не перезапускается. Не берите в голову... Я знаю, почему он не запускается из запланированной задачи, и мне нужно будет придумать лучший скрипт для выполнения этой конкретной операции.