大话Windows Script Host编程

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删除了,所以本来不用安装软件,所有机器都能使用的优势也不一定存在了,在一些机器上想要使用,也要安装系统了。 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简介 当Microsoft Windows 3.1发布,我希望它与操作系统托管的脚本语言来。其他操作系统没有提供这样的语言,但Windows 3.1只有旧式的MS - DOS批处理文件。由于多种原因,我不想使用第三方解决方案,如PowerBASIC和REXX。在Microsoft Windows 95的开始,我用的Microsoft Visual Basic,Visual Basic应用程序(VBA)的,HTML脚本不时。 1998年,当我在写德国微软出版社Microsoft Windows 98的手册,我发现,Windows 98的一个新功能,叫做Windows脚本宿主(WSH),它提供了两种脚本语言,微软的Visual Basic脚本版(VBScript)和Microsoft JScript中。 那年晚些时候,我开始写的Microsoft Press Microsoft Windows 98的电源工具包。我想,覆盖广泛的WSH在书中介绍了如何使用脚本来自动备份文件,映射网络驱动器和打印机,并显示用户对话框等任务。但是,我无法找到任何有关WSH的文件,并与Windows 98附带的帮助文件并不包括脚本编程Windows Script Host的参考,基本上只是一张白纸,我咨询过的书籍和网站处理HTML脚本只使用VBScript和JScript。于是我开始调查与Windows 98附带的WSH样本,访问微软的脚本的网站,写我自己的WSH样本。 我挣扎着找出哪些对象在特定情况下使用,如何获取有关属性和方法的信息,以及如何实现VBScript或JScript脚本。我的第一个脚本的调试是一个痛苦的过程。 1 WSH的报道大多是神秘的运行时错误消息行X或者脚本根本没有做什么,我预期。 (当时,我不知道如何使用Microsoft脚本调试器在脚本环境。)接收运行时的错误消息后,我会到记事本中加载的脚本,一次又一次,行计数手动找到故障线路,并尝试使用试验和错误的方法来修改代码。几个小时后,我决定,这种做法不可能是正确的方式做脚本编程。 一旦我开始访问的WSH新闻组,我发现其他人有同样的问题。伊恩Morrish,克拉伦斯华盛顿和迈克尔哈里斯,如新闻组参与者分享了大量有用的知识,但我还需要更多细节,特别是关于高级编程。我写的关于VBA编程和HTML脚本的书籍,所以我熟悉HTML脚本和ActiveX编程处理的互联网网站。从这些网站中,我学到一些编辑器,支持脚本编程,我学会了如何使用Visual Basic脚本调试器和对象浏览器等工具找出更多有关对象及其方法和属性。我是能够增加我的生产力显著,并创造一个相对舒适的环境脚本。 首先,我使用了典型的“宏程序员”的做法,我试图结合简单的语句创建一个脚本程序。有时这种方法的工作,但我常常是语法和运行时的错误消息轰炸。我也错过了,我也可以用来复制文件,启动程序,获取用户输入,等强大的报表。在WSH的新闻组中,一些人建议的第三方工具和语言,答应了丰富的报表收集。我知道,从以往的经验,但是,如果一种语言提供了丰富的报表集合,语言是难以学习和使用。 我用我的VBA编程经验的基础上,开始探索脚本背后的哲学。我了解到,您不必声明“埋”在一个任务,如阅读脚本的参数,并复制文件的脚本语言,因为WSH,您可以访问系统上安装的所有COM对象。因此,一个脚本可以使用这些COM对象提供的功能,以处理其任务。您还可以添加一个系统,它在不改变基本的脚本语言的脚本功能,增加新的COM对象。如果一个对象提供拼写检查,例如,你可以简单地在脚本中使用该对象。一旦我变得更加熟悉与WSH的,我发现它是最热门的技术在近年来从Microsoft。 WSH是胶,组合成一个新的,定制的应用程序中的对象(例如,一个Microsoft Office拼写检查,字处理器,一个浏览器,和邮件系统)。你可以实现一个复杂的应用程序的快速,方便,只需使用几行脚本代码。 这一点,我已经收集了大量的素材,积累了一些经验,写了许多样品。我也写了简短的章节对WSH在Microsoft Windows 98电源工具包。在1998年法兰克福书展,我会见了微软出版社收购编辑托马斯Pohlmann和斯蒂芬Guty,和WSH脚本编程标题的想法诞生。六个星期后,我的德国手稿准备好了。这本书的第一版出版于1999年1月。这是全球出版的第一个WSH的1本书。在春季,WSH 2中的第一个beta版本发布。我们决定等待直到Windows 2000发布之前提前与WSH 2本书。我花更多的时间调查WSH 2中和其他热点技术,如ActiveX数据对象(ADO),Active Directory服务接口(ADSI),和Windows管理规范(WMI)。我还写了WSH的初学者在电脑杂志的系列文章中,我的网站上创建的WSH街,花了很多时间,访问了WSH的新闻组,以了解更多的脚本程序员遇到的麻烦。 我收集的材料已经足够了两本书,这其中,对于初学者和中级用户,和一个先进的用户量,处理脚本技术。微软出版社将出版的第二本书,与微软Wi​​ndows Script Host的2.0先进的开发,今年晚些时候。这本书是为先进的脚本程序员,谁想要在此介绍卷涵盖的主题,深入覆盖。与Microsoft Windows脚本宿主2.0高级开发将解释如何使用额外的对象,以延长您的脚本功能。特别主题,如。WSF文件和许多无证暗示,涉及到这些文件的XML结构,将被覆盖。还包括将解释如何使用额外的工具,如OLE / COM对象查看器或对象浏览器中找出更多有关对象及其方法和属性。随着其他有用的技术,您将学习如何访问Microsoft Office应用程序从WSH脚本和如何使用,如Microsoft Excel电子表格,拼写检查办公室,Microsoft Word文档和Microsoft Outlook功能的对象。您还将学习如何阅读和使用Microsoft Access或ActiveX数据对象(ADO)从脚本编写到数据库。书中还介绍了管理员如何从WSH脚本访问Active Directory服务接口(ADSI),以维护用户帐户,服务或股份。您将了解新技术基于Web的企业管理(WBEM),和称为“Windows管理接口(WMI)微软执行,你会发现如何使用脚本来访问网络和计算机信息,并取消正在运行的进程。您还可以发现,如何写的ActiveX控件,使用Visual Basic的控制项建立版(CCE)访问Windows API函数,创建ActiveX的形式,访问剪贴板,控制CD盘,更。我将深入研究在这本书中使用的几个ActiveX控制更详细的源代码。鉴于Microsoft Windows脚本宿主2.0开发人员指南教你,你需要知道什么开始,与Microsoft Windows脚本宿主2.0高级开发与WSH的脚本会为您提供的信息,你需要成为一个专家WSH程序员。您将学到的专业开发人员使用,以帮助得到最有效的WSH的编程技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值