Windows Scripting Host (WSH) 是什么?

本篇主要介绍 WSH 基础知识,个人觉得很难理解,而且 Research 起来还很乱,所以决定记录下来!


WSH 是什么:

WSH 全称是,Windows Scripting Host,中文译为“Windows脚本宿主”;是微软的,一种脚本技术;是内嵌在 Windows 系统中的,脚本语言的,工作环境。在这个环境中,我们可以,以文字的形式,写脚本,并执行脚本。环境中,还自带了一些对象,同时也可以使用其他,第三方COM对象。这个环境,使我们可以充分利用脚本,来实现计算机工作的,自动化。所谓的 Host 也就是指,提供了,能让 VBScript 执行的,一切的资源,的环境。而这所谓的,一切的资源,都包含了什么呢?就包括了如下:

  1. Script engines (脚本语言支持,如,VBScript)
  2. Script execution hosts (wscript.exe 和 cscript.exe 执行文件)
  3. 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前后的书籍了。我从网上的旧书中淘到了一本,哈哈。亲自读过第一本,确实很好。文中部分内容,也借鉴了这本书。好吧,就写这些吧!


参考资料:

  1. Windows Script Host 是什么-ZOL问答
  2. Windows脚本宿主_百度百科
  3. WSH_百度百科
  4. Windows Script Host Object Model
  5. WScript Object | Microsoft Docs
  6. WshShell Object | Microsoft Docs
  7. Windows Script Host - Tim Hill - Google Books
  8. Windows Script Host - Wikipedia
  9. VBScript - What Is WSH?
  10. WshShell 对象介绍 - CSDN博客
  11. Wscript对象详解 - CSDN博客
  12. 《Microsoft WSH and VBScript Programming for the Absolute Beginner》
posted @ 2020-05-01 07:07  Bitssea  阅读(4752)  评论(1编辑  收藏  举报