利用WSH进行Windows上的管理自动化

WSH (Windows Scripting Host)

默认支持的语言有:VBScript, JScript,还有一个什么忘了!你如果喜欢用非默认的语言,那么需要安装相应的engine才可以。

默认安装支持执行的时候的host程序有两个:cscript.exe和wscript.exe,你点击.vbs文件时启用的是WScript,这是面向GUI的,另一个是Cscript,这是面向Console的。如果你想改成默认就是CScript,运行 "cscript //H:cscript"即可。

 

VBScript的基本语法:

  • 一行一个命令,如果一定要多个命令放在一行,用:隔开,一行的结束没有分号之类的符号
  • 用_符号作为跨行连接符号,类似java里\的作用
  • 大小写不区分
  • 字符串用双引号
  • 用&符号作字符串和变量的连接,如 Test = "A" & "B"
  • 注释:用‘符号开头的行都是注释
  • 定义过程

       Sub MyProc(Param1, Param2)

         ......

       End Sub

  • 定义函数

        Function MyFunc(Param1, Param2)

          ......

          MyFunc= ... (设置你的返回值)

        End Function

 

语法其实没什么,找到资料看看很快就会。关键是用WSH能干啥。其实范围很广,我也无法列举全部,或者简单的说,一切皆有可能。

但是一般拿来做自动化处理也看着很合适,至少我成功试过用它(借助其他一些命令或者工具)可以完成自动安装,文件拷贝,起停服务等操作,整个安装过程自动完成,无需人工干预。

 

安装应用程序一般是都是有界面的,需要人工互动以完成安装,但是其实很多安装工具也考虑过安装自动化的问题。如Nullsoft做的安装文件用/S参数即表示silent模式的安装(全部使用默认的设置)。具体的话可以参考 Unattended/Silent Installation Switches for Windows Apps:http://unattended.sourceforge.net/installers.php

 

文件操作用的是FileSystemObject对象,该对象提供了多种文件和目录的操作函数,其实其他很多操作都是通过相应的对象来完成的,在你的平台上可以用什么对象,这些对象有什么函数,云云,则需要查阅具体平台的系统手册了。如:

Set fso = CreateObject("Scripting.FileSystemObject")

fso.CreateFolder "C:\myfolder"

 

借助操作系统命令或者第三方命令工具,可以完成更多的功能,例如利用net命令可以起停Windows服务,如

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

WshShell.Run "net start Schedule", 1, true

 

如果你想下载文件,那么,找一个Windows版的wget.exe(http://gnuwin32.sourceforge.net/packages/wget.htm)即可,然后利用WshSihell对象来Run即可。

如果你想检测某端口是否打开,找到微软提供的PortQry.exe(http://www.microsoft.com/downloads/en/details.aspx?familyid=89811747-c74b-4638-a2d5-ac828bdc6983&displaylang=en),然后运行之,检查结果即可(返回0代表该端口在监听,1代表不在监听):return = WshShell.Run(".\PortQry.exe -n 127.0.0.1 -p tcp -e 80", 1, true)

如果你还有其他功能想达到,那么要么查阅wsh和OS手册,看看有没有,如果没有那就找第三方命令工具来实现,如果在没有,那就自己编个程序吧,java/c/c#都可以,只要你的运行环境在就好了。

 

如果你找不到命令行的工具以替代你想要的功能,就是说你不可以避免要和GUI打交道,那么VBScript有种方法还是可以模拟键盘按键顺序和GUI窗口打交道的,虽然用起来不太爽。请看例子:

  Set WshShell = WScript.CreateObject("WScript.Shell")
  WshShell.Run "notepad.exe"
  WScript.Sleep 2000
  WshShell.AppActivate "无标题"
  WshShell.SendKeys "1{+}"
  WshShell.SendKeys "2"
  WshShell.SendKeys "*3"
  WshShell.SendKeys "%FS"
  WshShell.SendKeys "C:\temp.txt"
  WshShell.SendKeys "%S"
  WshShell.SendKeys "%{F4}"

以上语句会通过运行notepad.exe然后输入一系列键盘按键来完成一个简单文本文件的创建,%F表示Alt-F,%S表示Alt-S,%{F4}表示Alt-F4,具体可参考http://msdn.microsoft.com/en-us/library/8c6yea83%28VS.85%29.aspx。

 

虽然很多情况下你用模拟键盘输入即可以完成工作,但是如果你不可以避免需要模拟鼠标按键,那么,WSH/VBScript似乎是无能为力的。如果你一定坚持要模拟鼠标,你还是可以尝试一下AutoIt(http://www.autoitscript.com/autoit3)或者AutoHotKey(http://www.autohotkey.com)。

 

另外,如果你需要找一些特殊的目录,如当前用户的Application Data目录,My Document目录等等,你可以参考这里 http://www.cruto.com/resources/vbscript/vbscript-examples/desktop/special/,它列举了非常多的目录的获取方法。

posted @ 2010-10-18 22:17  长须飘飘  阅读(799)  评论(0编辑  收藏  举报