百度地图 所有文章 文章列表
首页 > Asp编程 > 大话Windows Script Host编程
大话Windows Script Host编程
发布日期:2009/5/8
    1.引言

  WSH的全称是Windows Script Host,是一种支持ActiveX(COM)的独立脚本语言。WSH脚本程序本来是为了替代DOS时代的批处理文件而产生的,后来由于WSH的应用很广泛,已经不只是局限于批处理的替代品了。从Windows98开始,操作系统就已经自带了WSH,因此在Windows98或以上的操作系统中,可以不安装任何软件就能直接使用WSH。Microsoft的主页上有最新版的WSH供下载,目前的版本是5.6,有用于Windows9X与Windows2000/XP的两种版本,每种版本的安装文件均不超过1M。

  2.WSH脚本文件的基本概念

  2.1 WSH脚本文件类型

  WSH可以使用VBscript与Jscript,即使用的脚本语言与网页脚本是一样的。WSH文件的扩展名为vbs及js,分别用VBscript与Jscript作为编程脚本语言。还有一种脚本文件的扩展名是wsf,它是一种包含XML的文件,wsf文件中可以同时包含VBscript与Jscript两种语言。wsf文件中,可以使用多种脚本,需要一些XML标签来声明的,最基本的就是用<script>标签说明脚本的类型,另外最外层要用<job>标签声明任务。下面就是一个最简单的wsf脚本的框架例子:

<package><job>
<script language="VBscript">
wscript.Echo "这是VBscript" 'vb脚本
</script>
<script language="jscript">
wscript.Echo("这是jscript") ;//java脚本
</script>
</job></package>

  而vbs与js文件就不用任何额外的内容,直接写VBscript及Jscript语句即可。

  2.2 WSH脚本文件的运行:

  上面所讲的3种wsh文件都可以直接在Windows中双击运行,他们关联的执行文件是wscript.exe文件。另外执行脚本的程序还有一个,它是cscript.exe,是一个可以在DOS下运行的程序。当然DOS下运行的程序与Windows的大部分功能是相同的,只是稍微有点不同,如同样是Wscript.Echo输出语句,wscript.exe的结果是以窗口方式显示,而cscript.exe是以标准控制台方式输出,并可以进行DOS改向。

  另外运行WSH脚本时也支持文件的拖放操作。具体的操作步骤是:选中若干个文件,把它们拖到包含下面脚本的文件,那么下面vbs脚本就会执行,并获取拖过来的文件名,把它们显示出来:

Set objargs=Wscript.Arguments
For i=0 to objargs.count-1
Wscript.Echo objargs(i)
Next


  2.3 WSH的主要对象

  WSH的脚本不支持API功能,WSH除了提供若干脚本语言外,还提供了一些编程可以使用的对象,利用这些对象,可以方便地进行一些脚本语言本身不具备的功能,如系统、网络等操作。

  2.3.1 Wscript对象

  Wscript对象是WSH本身具有的对象,在脚本中不需要建立,可以直接使用。它的最常用的一个方法CreateObject,用于创建一个COM对象,可以调用其他COM程序。WSH的Echo方法、Quit方法、Sleep方法,以及Path属性、ScriptFullName属性都可以在脚本中使用,为脚本的编写提供方便。

  2.3.2 WshShell对象

  WshShell对象是WSH提供的最有用的一个对象,有许多系统功能平时只能用API方式才能实现,用WshShell的方法即可简单地实现。它可用Wscript.Createobject(“wscript.shell”)方法建立。其常用方法与属性有:CreateShortcut方法用于创建一个快捷方式或URL快捷方式; Run方法用于执行程序,功能比VB的Shell命令功能要强,可以直接打开关联文件、文件夹、网页等;RegDelete/RegRead/RegWrite方法是对注册表项的删除、读取与写入,是非常有用的;SendKeys方法将指定的按键序列送至活动窗口;SpecialFolders属性返回特殊的文件夹名,如桌面、我的文档等。

  2.3.3 WshNetwork对象

  WshNetwork对象主要涉及网络及打印机方面的功能,其主要方法与属性有:建立或删除网络打印机的连接,映射及删除网络驱动器,枚举网络驱动器及网络打印机等方法。

  2.3.4 WshShortcut/ WshUrlShortcut对象:

  WshShortcut/WshUrlShortcut对象并不能由Createobject方法来产生,而是由WshShell的CreateShortcut方法建立。先设置快捷方式的相关属性,再用Save方法建立即可。

  2.3.5 FSO对象:

  FSO是File System Object的缩写,它提供磁盘、文件夹及文件的有关操作,是由WScript.CreateObject("Scripting.FileSystemObject")产生。FSO对象对于使用过动态网页制作的人是不陌生的,后台程序对于文件操作基本上都是用FSO来实现的。由于VBscript脚本语言是VB语言的一个简易版,去掉了VB的一些功能,其中所有的文件功能都去掉了,所以脚本中只能用COM的方法调用FSO对象来解决文件夹及文件的一些操作。从严格意义上来讲,FSO对象不是WSH所带的,而是VBscript所带的,但由于WSH本身带了VBscript,而且FSO在WSH的作用 非常大,所以说WSH带了FSO也未尝不可。但由于介绍FSO的文章很多了,所以这里就不再对它进行细述了。

  2.3.6 调用其它对象:

  WSH是可以调用其它的COM对象的,所以只要机器上已经安装的软件,并提供COM服务器方式的,都可以在WSH中调用。包括ODBC数据库操作对象、各种EXE方式的对象等,如可以直接操作Word的“Word.Application”对象。即WSH能使用的对象就是无穷的了。

  2.4 WSH文件的编辑

  由于WSH文件是一个纯文本文件,从理论上讲,可以用任何的文本编辑器均可进行编辑。但由于现在一些网页制作软件都为一些脚本程序提供属性及方法的智能提示功能,所以选择一些这样的工具会方便许多的。其中微软的Visual InterDev是不错的选择,毕竟它与WSH都是微软的产品,互相配合比较好。当然若输入是按网页的方式进行,最后可能要去掉一些HTML标签。

  2.5 脚本示例

  下面是一个软件安装的脚本例子,它完成文件复制、在桌面建立快捷方式、修改注册表设置自动启动的功能。程序中有详细的注释,有VB基础的都能够看明白的。完成某软件的安装,只需要把下面的程序保存成一个VBS文件,与要安装的文件放在同一目录下,在需要安装的机器上直接双击就可以安装了。

'建立两个对象:
Set owsh = wscript.CreateObject("WSCript.Shell")
Set ofso = wscript.CreateObject("Scripting.FileSystemObject")
'提示目标文件夹
cdest = InputBox("要安装的目标文件夹:","安装","c:\xxx")
'脚本所在文件夹为源文件夹:
cSrc= ofso.GetFile(wscript.scriptfullname).ParentFolder
'复制文件到目标文件夹:
ofso.copyfile cSrc &"*.*", cDest
'在桌面建立快捷方式:
cDesktop = owsh.specialFolders("desktop") '桌面文件夹
Set olink = owsh.createshortcut_
(cDesktop & "\xx管理系统.lnk") '建立快捷方式对象
olink.targetPath = cDest & "xx.exe" '目标文件
olink.WindowStyle=1 '运行方式:常规窗口
olink.hotkey="CTRL+SHIFT+F" '热键
olink.Workingdirectory=cDesktop '工作目录
olink.save '生成快捷文件
'把程序写入注册表的自动运行项中,让程序开机时自动运行
cReg="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\"
owsh.regwrite cReg, cDest & "xx.exe" '文件写入自动运行注册表项
Msgbox "程序安装完成"

  2.6 脚本文件的加密

  由于脚本文件是纯文本文件,所以任何人不用任何工具都可以直接查看代码。与网页文件加密一样,WSH脚本文件也可以用微软提供的脚本编码器进行加密编码。编码器screnc可直接免费下载安装,它是一个命令行方式的软件,vbs与js文件分别编码加密成vbe与je文件,此类文件也可以直接双击运行,编码后的代码虽然还是文本文件,但里面的内容已经打乱了。编码后的文件还具有不可修改性,只要对它进行修改,即使只修改了1个字节,整个脚本就不能使用了。虽然编码器可以打乱代码,让人不能阅读其中的代码,也不能修改,但它只能算一个简单的工具,是防君子不防小人的,对付真正的解密高手或黑客是一点用都没有的。

  3.WSH的应用

  3.1 替代批处理文件

  WSH的原目的就是为了替代DOS时代的批处理命令而推出的。如上例中的安装程序,就可以直接双击对应的文件,运行事先编写好的程序实现安装功能。这种用法主要用于一些简单的环境系统设置、临时性编写的小工具等具有一定逻辑功能的程序。由于功能比批处理强大得多,而编写及运行比使用特定的编程语言要简单,不需要开发环境及编译过程,修改也很方便,因此掌握WSH的脚本,对于程序员还是有一定的作用的。

  3.2作为COM接口提供服务

  WSH的另外的一个用途是作为COM接口程序供其他编程语言调用,可以提供一些此语言本身不具备的功能。一般情况下,在编程语言中若本身不提供的功能,要通过API来实现,但使用API毕竟比较麻烦。WSH提供的对象的功能是比较有用的,可以替代API。

  作为一个标准的COM接口程序,上述介绍的WSH的对象,除了Wscript对象外,其它的对象都是可以直接在其它编程语言中使用的。如在VB中就可以直接用CreateObject函数建立对象,然后用对象的方法及属性对其进行操作。

  4.WSH的安全问题

  WSH脚本程序很简单,但是大部分高级语言能干的事情,它基本上都具备,所以许多病毒也利用了这一点,利用WSH来编制病毒程序。有些病毒甚至简单地用Email发送一个带病毒的VBS附件,用户一旦双击此附件文件,就会传染上病毒了。所以一段时间WSH弄得人心惶惶,许多人把WSH看作是病毒的罪魁祸首了。许多地方都介绍删除WSH而防止病毒的方法。其实也用不着这样害怕,虽然删除了WSH,可以防止部分利用WSH进行传染的病毒,但是这样防止根本不能从根本上解决问题。如收到VBS文件直接打开传染的问题,你打开一个EXE文件也有这问题,难道让机器把EXE文件也禁止了?其实只要知道VBS/JS/WSH/WSF等文件也是可以直接运行的、是有危险就是了,收到别人的这类文件就值得怀疑了。同样道理,WSH以组件方式为病毒干坏事,助纣为虐的事也一样,关闭WSH也只能解决部分问题,其它组件怎么办?设置IE选项中的安全级别很重要,安全级别太低了是不安全的。另外升级WSH到5.6版也可提高安全系数,有许多漏洞5.6版已经堵住了。当然若的确不用WSH,关闭它也是一种办法,Windows2000的方法是把VBS/JS等文件的关联去掉,或者干脆把Wscript.exe与Cscript.exe文件改名或删除。

  5.结束语

  WSH使用的是脚本语言,虽然功能没有正式的编程语言那么强,但由于系统是内置的,要求简单,甚至记事本就可以编写源程序,并可直接运行,而且使用的脚本语言是与常用的VB及Java很相似的两种脚本语言,所以应用还是非常广泛的。如一些简单的软件安装,系统机器的维护,为其它软件提供服务功能等。但它的缺点是由于部分机器为了防止病毒,把WSH删除了,所以本来不用安装软件,所有机器都能使用的优势也不一定存在了,在一些机器上想要使用,也要安装系统了。

Related Information