Запланируйте запуск файла .vbs в Windows. - PullRequest
1 голос
/ 12 ноября 2008

У меня есть сценарий VBScript , который запускает приглашение cmd, подключается к устройству через telnets и TFTP конфигурирует сервер. Это работает, когда я вошел в систему и запустить его вручную. Я хотел бы автоматизировать это с Windows Task Scheduler .

Любая помощь приветствуется, вот скрипт VBScript:

set WshShell = WScript.CreateObject("WScript.Shell") 
WshShell.Run "cmd" 
WScript.Sleep 100 
WshShell.AppActivate "C:\Windows\system32\cmd.exe" 
WScript.Sleep 300 
WshShell.SendKeys "telnet 10.20.70.254{ENTER}" 
WScript.Sleep 300 
WshShell.SendKeys "netscreen" 
WScript.Sleep 300 
WshShell.SendKeys "{ENTER}" 
WScript.Sleep 300
WshShell.SendKeys "netscreen" 
WshShell.SendKeys "{ENTER}" 
WScript.Sleep 300 
WScript.Sleep 300 
WshShell.SendKeys "save conf to tftp 10.10.40.139 test.cfg{ENTER}"
WScript.Sleep 200 
WshShell.SendKeys "exit{ENTER}" 'close telnet session' 
set WshShell = WScript.CreateObject("WScript.Shell") 
WshShell.Run "cmd" 
WScript.Sleep 100 
WshShell.AppActivate "C:\Windows\system32\cmd.exe" 
WScript.Sleep 300 
WshShell.SendKeys "telnet 10.20.70.254{ENTER}" 
WScript.Sleep 300 
WshShell.SendKeys "netscreen" 
WScript.Sleep 300 
WshShell.SendKeys "{ENTER}" 
WScript.Sleep 300
WshShell.SendKeys "netscreen" 
WshShell.SendKeys "{ENTER}" 
WScript.Sleep 300 
WScript.Sleep 300 
WshShell.SendKeys "save conf to tftp 10.10.40.139 palsg140.cfg{ENTER}" 'repeat as needed 
WScript.Sleep 200 
WshShell.SendKeys "exit{ENTER}" 'close telnet session' 
WshShell.SendKeys "{ENTER}" 'get command prompt back 
WScript.Sleep 200 
WshShell.SendKeys "exit{ENTER}" 'close cmd.exe

WshShell.SendKeys "{ENTER}" 'get command prompt back 
WScript.Sleep 200 
WshShell.SendKeys "exit{ENTER}" 'close cmd.exe

Ответы [ 6 ]

4 голосов
/ 12 ноября 2008

Добавьте запланированное задание, которое запускает сценарий с вашими учетными данными. Напомните себе, что вам нужно обновлять учетные данные в задаче каждый раз, когда вы меняете свой пароль. Было бы неплохо, чтобы скрипт «звонил домой» по электронной почте или тому подобное при каждом его запуске, чтобы вы могли определить, выполняется ли он.

Также было бы неплохо установить отдельный идентификатор службы для этих видов деятельности. Возможно, вам не придется менять пароль на идентификаторе службы так часто.

3 голосов
/ 12 ноября 2008

Вы можете добавить запланированное задание и не вводить учетные данные или пароль для него. Это заставит его работать в ЛОКАЛЬНОЙ СИСТЕМЕ (обычно это контекст, используемый службой планировщика заданий).

Имейте в виду, что это сценарий уязвимости бэкдора: любой, кому разрешено редактировать файл сценария, может использовать его для выполнения нежелательных действий на компьютере, на котором выполняется задача. Поместите соответствующее разрешение в файл сценария, чтобы предотвратить это. С другой стороны - задача, выполняемая как ЛОКАЛЬНАЯ СИСТЕМА, не может разрушить сеть.

Я предлагаю вам немного сжать файл скрипта:

Set WshShell = WScript.CreateObject("WScript.Shell") 

Run "cmd.exe" 
SendKeys "telnet 10.20.70.254{ENTER}" 
SendKeys "netscreen" 
SendKeys "{ENTER}" 
SendKeys "netscreen" 
SendKeys "{ENTER}" 
SendKeys "save conf to tftp 10.10.40.139 test.cfg{ENTER}"
SendKeys "exit{ENTER}" 'close telnet session' 

Run "cmd.exe" 
SendKeys "telnet 10.20.70.254{ENTER}" 
SendKeys "netscreen" 
SendKeys "{ENTER}" 
SendKeys "netscreen" 
SendKeys "{ENTER}" 
SendKeys "save conf to tftp 10.10.40.139 palsg140.cfg{ENTER}" 'repeat as needed 
SendKeys "exit{ENTER}" 'close telnet session' 
SendKeys "{ENTER}" 'get command prompt back 
SendKeys "exit{ENTER}" 'close cmd.exe
SendKeys "{ENTER}" 'get command prompt back 
SendKeys "exit{ENTER}" 'close cmd.exe

Sub SendKeys(s)
  WshShell.SendKeys s
  WScript.Sleep 300
End Sub

Sub Run(command)
  WshShell.Run command
  WScript.Sleep 100 
  WshShell.AppActivate command 
  WScript.Sleep 300 
End Sub

1 голос
/ 17 июня 2009

просто создайте командный файл, который содержит это:

cscript.exe myscript.vbs

сохранить как что-то вроде myscript.bat.

Использование задач расписания для планирования файла .bat. После создания запланированного задания вам, возможно, придется проверить его свойства, чтобы убедиться, что оно имеет соответствующие права пользователя.

Есть некоторые опции , которые можно использовать с cscript, чтобы он не отображал логотип и т. Д.

1 голос
/ 17 ноября 2008

Я довольно SendKeys не будет работать, если вы не вошли в систему. В любом случае это ненадежно. Возможно, вам лучше использовать пакетный файл DOS.

getftpconf.bat:

telnet 10.10.40.139
netscreen
netscreen
save conf to tftp 10.10.40.139 palsg140.cf
exit

Нечто подобное.

Если в командной строке есть выходные данные, которые вам нужно записать, вы можете поставить «>> output.txt» в конце ярлыка командной строки.

Затем вы можете вызвать другой пакетный файл, который отправит этот файл output.txt через ftp туда, куда вам нужно.

Вы можете легко настроить этот пакетный файл для запуска в Windows по расписанию.

1 голос
/ 12 ноября 2008

Я почти уверен, что SendKeys не будет работать, если рабочий стол заблокирован или пользователь не вошел в систему.

0 голосов
/ 17 июня 2009

Пакетные файлы не работают в Windows с Telnet (отлично работает в UNIX - опять же, путь Microsoft). Как уже упоминалось здесь, sendkeys не работает в vba, когда не вошел в систему.

Извините, у меня нет решения "это работает" ... Я застрял на той же проблеме

...