2008-11-12 5 views
1

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

Любая помощь будет оценена, вот сценарий 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 
+2

Что происходит, когда вы пытаетесь? Вы не говорите, какие проблемы вы испытываете – 2008-11-12 15:01:48

ответ

4

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

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

+0

Если для telnet и cscript может потребоваться контекст рабочего стола (особенно с «sendkeys»). Возможно, вам придется оставить пользователя, зарегистрированного на компьютере, для выполнения запланированной задачи. – 2008-11-12 15:11:47

3

Вы можете добавить запланированное задание и не вводить никаких учетных данных или пароль для него. Это приведет к его запуску в LOCAL SYSTEM (обычно это контекст, используемый службой планировщика заданий).

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

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

 
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 

+0

Nice Sub. Это экономит около 20 строк! +1 ;-) – Kredns 2009-06-16 21:31:30

1

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

1

Я довольно 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 туда, где вам нужно.

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

0

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

К сожалению у меня нет «это действительно работает» для вас решение .... Я застрял на одной и той же проблемы

1

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

cscript.exe myscript.vbs 

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

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

Есть some options вы можете использовать с Cscript, чтобы он не показывать логотип и т.д.

Смежные вопросы