安排.vbs文件在Windows中运行

时间:2008-11-12 14:58:35

标签: command-line vbscript windows-server-2003 telnet wsh

我有一个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

6 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

您可以添加计划任务,也不输入任何凭据或密码。这将导致它在LOCAL SYSTEM(通常是Task Scheduler服务使用的上下文)下运行。

请注意,这是一个后门漏洞场景:任何允许编辑脚本文件的人都可能会滥用它来在运行任务的计算机上执行不需要的操作。对脚本文件赋予适当的权限以防止这种情况。另一方面 - 作为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

答案 2 :(得分:1)

我非常确定如果桌面被锁定或没有用户登录,SendKeys将无法工作。

答案 3 :(得分: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中作为计划任务运行。

答案 4 :(得分:1)

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

cscript.exe myscript.vbs

将其保存为类似myscript.bat的内容。

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

您可以使用some options来使用cscript,因此它不会显示徽标等。

答案 5 :(得分:0)

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

抱歉,我没有为您提供“这项工作”解决方案....我遇到了同样的问题