1

我有一个VBScript脚本,它启动一个 cmd 提示符,telnet 到一个设备和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
4

6 回答 6

4

添加使用您的凭据运行脚本的计划任务。提醒自己,每次更改密码时都需要更新任务的凭据。每次运行时通过电子邮件或其他方式让脚本“打电话回家”是个好主意,这样您就可以判断它是否正在执行。

为此类活动设置单独的服务 ID 可能也是一个好主意。您可能不需要经常更改服务 ID 上的密码。

于 2008-11-12T15:02:34.097 回答
3

您可以添加计划任务并且不为其输入凭据或密码。这将导致它在本地系统(通常是任务计划程序服务使用的上下文)下运行。

请注意,这是一个后门漏洞场景:任何被允许编辑您的脚本文件的人都可能滥用它在运行该任务的机器上做不受欢迎的事情。对脚本文件设置适当的权限以防止这种情况发生。另一方面 - 作为 LOCAL SYSTEM 运行的任务不能对网络造成严重破坏。

我建议你稍微压缩你的脚本文件:

设置 WshShell = WScript.CreateObject("WScript.Shell")

运行“cmd.exe”
SendKeys "telnet 10.20.70.254{ENTER}"
SendKeys“网屏”
发送键“{ENTER}”
SendKeys“网屏”
发送键“{ENTER}”
SendKeys“将配置保存到 tftp 10.10.40.139 test.cfg{ENTER}”
SendKeys "exit{ENTER}" '关闭远程登录会话'

运行“cmd.exe”
SendKeys "telnet 10.20.70.254{ENTER}"
SendKeys“网屏”
发送键“{ENTER}”
SendKeys“网屏”
发送键“{ENTER}”
SendKeys "save conf to tftp 10.10.40.139 palsg140.cfg{ENTER}" '根据需要重复
SendKeys "exit{ENTER}" '关闭远程登录会话'
SendKeys "{ENTER}" '返回命令提示符
SendKeys "exit{ENTER}" '关闭 cmd.exe
SendKeys "{ENTER}" '返回命令提示符
SendKeys "exit{ENTER}" '关闭 cmd.exe

子发送密钥
  WshShell.SendKeys
  WScript.Sleep 300
结束子

子运行(命令)
  WshShell.Run 命令
  WScript.Sleep 100
  WshShell.AppActivate 命令
  WScript.Sleep 300
结束子

于 2008-11-12T15:24:10.963 回答
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”。

然后,您可以调用另一个批处理文件,通过 ftp 将该 output.txt 发送到您需要的任何地方。

您可以轻松地将此批处理文件设置为在 Windows 中作为计划任务运行。

于 2008-11-17T14:09:02.650 回答
1

只需制作一个包含以下内容的批处理文件:

cscript.exe myscript.vbs

将其保存为 myscript.bat 之类的文件。

使用计划任务来计划 .bat 文件。创建计划任务后,您可能需要检查它的属性以确保它具有适当的用户权限。

您可以将一些选项与 cscript 一起使用,这样它就不会显示徽标等。

于 2009-06-16T21:39:44.170 回答
1

如果桌面被锁定或没有用户登录,我很确定 SendKeys 将不起作用。

于 2008-11-12T17:46:48.303 回答
0

批处理文件不能在带有 Telnet 的 Windows 中工作(在 UNIX 中工作正常——再次,微软的方式)。正如这里已经提到的,未登录时,sendkeys 在 vba 中不起作用。

抱歉,我没有适合您的“这确实有效”的解决方案....我遇到了同样的问题

于 2009-06-16T21:27:19.267 回答