Estou tentando criar um VBScript que posso executar a partir de uma tarefa agendada para reiniciar o firewall do SonicWall. O firewall é um modelo de negócios "low-end" (TZ400), e eu periodicamente tenho que reiniciá-lo porque nossa conexão com a Internet parece estar atolada (esse é outro problema que terei que pesquisar mais tarde).
Eu encontrei o seguinte código em outro site para usar plink.exe
e modifiquei para o meu ambiente:
Set sw= CreateObject("WScript.Shell")
sw.run"C:\plink\path\Plink.exe -ssh [email protected] -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}"
Infelizmente, quando executo esse script, ele parece ignorar alguns dos caracteres das chamadas do método SendKeys
. Se eu rodá-lo da minha máquina (Windows 7), normalmente posso fazer com que ele passe caracteres "suficientes" para concluir a operação, mas quando tento executar o mesmo script no servidor (Windows Server 2008 R2 - Eu conectado através do RDP), fica completamente descontrolado. Veja a imagem abaixo para um exemplo após uma tentativa particularmente "errada".
Eutenteicolocarumatrasoentrecadaumdoscomandoseeleestácorrespondendoa{ENTER}
,masissoparecepioraraindamais.Eutenteianexarotextoparaenviarentreparêntesesapenasnocasodeteralgoavercomasintaxedachamadadométodo,masissotambémnãoajudou.
Peloqueeupossodizer,parecequeopromptdecomandosimplesmentenãoécapazde"acompanhar" o método SendKeys
por algum motivo. Alguém já passou por esse problema e alguém tem uma sugestão de como evitá-lo ou evitá-lo? Por exemplo, existe uma maneira de "desacelerar" a execução do script de alguma forma? Agradecemos antecipadamente por qualquer sugestão.
EDIT: Consegui que o script seja executado com sucesso no servidor, alterando o script para enviar cada caractere separadamente com um intervalo de 100ms entre eles:
Set sw= CreateObject("WScript.Shell")
sw.run"C:\plink\path\Plink.exe -ssh [email protected] -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
Embora esta solução pareça funcionar, parece um pouco "força bruta" e não resolve realmente qualquer problema subjacente, por isso ainda estou interessado em quaisquer pensamentos ou sugestões.
NOTA: Enquanto isso me permite executar o VBScript manualmente a partir da linha de comando, ainda estou tendo problemas para executá-lo a partir da tarefa agendada. Parece começar e terminar, mas o firewall nunca é reiniciado. Nevermind ... Eu sei porque não está sendo executado a partir da tarefa agendada, e eu vou ter que chegar a um script melhor para lidar com essa operação em particular.