本篇主要介绍 WSH 基础知识,个人觉得很难理解,而且 Research 起来还很乱,所以决定记录下来!
WSH 是什么:
WSH 全称是,Windows Scripting Host,中文译为“Windows脚本宿主”;是微软的,一种脚本技术;是内嵌在 Windows 系统中的,脚本语言的,工作环境。在这个环境中,我们可以,以文字的形式,写脚本,并执行脚本。环境中,还自带了一些对象,同时也可以使用其他,第三方COM对象。这个环境,使我们可以充分利用脚本,来实现计算机工作的,自动化。所谓的 Host 也就是指,提供了,能让 VBScript 执行的,一切的资源,的环境。而这所谓的,一切的资源,都包含了什么呢?就包括了如下:
- Script engines (脚本语言支持,如,VBScript)
- Script execution hosts (wscript.exe 和 cscript.exe 执行文件)
- The WSH core object model (WSH 对象模型,就是自带了一些对象给你用)
而,这三个 Component 之间的关系,就如图下:
WSH 的用途:
这是我摘抄下来的两句话,基本概括了 WSH 的用途:
- WSH is an automation technology for Microsoft Windows operating systems.
- WSH is a Windows administration tool.
第一句是说,WSH 是一种自动化技术;第二句是说,WSH 是一种 Admin 工具;合起来就是,WSH 主要用于自动化,通常用于 Admin 任务。
WSH 的历史由来:
早年间的系统,里面都有一个 Command Shell,人们可以往里输入,文字命令,然后,系统再回给你一堆文字。这些文字命令,既能控制系统的方方面面,也能控制电脑的运行。很快的,设计系统的人意识到,很多日常电脑操作的命令,都是不断重复的文字。于是之后的系统,就增加的新功能,就是,可以把命令存在一个文件中,然后,系统可以随时读取并执行,这个文件中储存的命令。然后,这个“命令的清单”,就被称为了,我们都知道的,batch files(批处文件),也叫做,shell scripts,batch jobs。随后的几年,batch file 得到了很多加强,如,支持 Parameterization (参数化),就是支持程序执行时,提供 Arguments。然后,又增加了 Control Flow 的支持,就是 if 和 loop 什么的。后来,渐渐的,batch files,发展为了,一门简单的 Macro 语言。但是,batch files 语言,也有一系列的缺点和不足;如,syntax 很麻烦,并且,和其他 Windows 程序的交互,非常的局限。正是这些缺点的不足,让微软决定开发一套,不同于传统的 Commend-Line 概念的,而是,基于,现代的 Object-Oriented 概念的,脚本技术。这套新技术,被统称为,System Scripting,也就是,系统脚本。然后从 Windows98 起,微软就推出了 WSH 和 VBScript,用于取代原来的,Batch Script 技术。WSH 提供了一个,干净整洁的,脚本环境,和一套完整的,对象模型。让我们可以调用其他程序,和访问系统功能,VBScript 则提供了一套,逻辑清晰,结构工整的,脚本语言。这也就是,WSH 和 VBScript,的历史由来。
WSH 对象模型:
英文全称为,Windows Script Host Object Model;个人理解,对象模型,就是对象(Object)的组织结构(图)。其实,整个 Windows 操作系统,都可以理解为,一大堆对象(Objects)的集合。通常,每个编程环境,都会提供自己的对象模型,然后,开发人员可以使用这些对象模型,解决各种问题。而,WSH 对象模型,就是 WSH 工作环境里,自带的一套,核心对象的,模型。一共自带了14个对象,各有各的作用,详见下面的说明:
关于 Wscript 对象:
其中,Wscript Object,是 WSH 对象模型,中的 Root Object (根对象),It is from this object that all other objects are instantiated。Wscript Object,每次开机时候,就自动被 established,所以,写代码的时候,可以拿来就用,不用再被 instantiated。例如,你可以直接使用 Wscript 的 Method,Wscript.Sleep()
。但是,其他任何Object,你要像使用它的 Method,你都需要像用 Wscript.CreateObject()
,去 Establishes an instance of the specified object,然后,才能用这个新的 instance 去调用,它旗下的 method 和 attribute。下面是,WSH 对象模型的图,再下面的表格是,上面提到的14个核心对象的作用。
No. | Name | Description |
---|---|---|
1 | Wscript | 主要作用是提取命令行变量, 确定脚本文件名, 确定 WSH 执行文件名 (wscript.exe 还是 cscript.exe), 确认 Host 版本信息, 创建, 关连及分离 COM 对象, 写入事件, 按程序结束一个脚本文件的运行, 向默认的输出设备(如对话框, 命令行)输出信息等. |
2 | WshArguments | 主要作用是获取全部的命令行变量. |
3 | WshNamed | 负责获取指定的命令行参数集. |
4 | WshUnnamed | 负责获取未经指定的命令行参数集. |
5 | WshNetwork | 主要作用是开放或关闭网络共享, 连接或断开网络打印机, 映射或取消网络中的共享, 获取当前登陆用户的信息. |
6 | WshController | 创建一个远程脚本对象. |
7 | WshRemote | 实现网络中对计算机系统的远程管理, 也可按计划对其它程序或脚本进行处理. |
8 | WshRemote Error | 作用是当一个远程脚本(WshRemote 对象)因脚本错误而终止时, 获取可用的错误信息. |
9 | WshShell | 主要负责程序的本地运行, 处理注册表项, 创建快捷方式, 获取系统文件夹信息, 处理环境变量等. |
10 | WshShortcut | 主要用于按计划创建快捷方式. |
11 | WshSpecialFolders | 用于获取任意一个 Windows 特殊文件夹的信息. |
12 | WshURLShortcut | 用于按程序要求创建进入互联网资源的快捷方式. |
13 | WshEnvironment | 用于获取任意的环境变量(如 WINDIR, PATH, 或 PROMPT). |
14 | WshScriptExec | 用于确定一个脚本文件的运行状态及错误信息. |
篇尾总结:
如果想更多的了解,VBScript 或者 Batch Script,强烈推荐下面两本书:
- 《Windows Script Host》Tim Hill
- 《Windows NT Shell Scripting》Tim Hill
可惜好像没有中文版,而且都是1999前后的书籍了。我从网上的旧书中淘到了一本,哈哈。亲自读过第一本,确实很好。文中部分内容,也借鉴了这本书。好吧,就写这些吧!
参考资料:
- Windows Script Host 是什么-ZOL问答
- Windows脚本宿主_百度百科
- WSH_百度百科
- Windows Script Host Object Model
- WScript Object | Microsoft Docs
- WshShell Object | Microsoft Docs
- Windows Script Host - Tim Hill - Google Books
- Windows Script Host - Wikipedia
- VBScript - What Is WSH?
- WshShell 对象介绍 - CSDN博客
- Wscript对象详解 - CSDN博客
- 《Microsoft WSH and VBScript Programming for the Absolute Beginner》