跳转到内容

Windows 编程/Windows 脚本宿主

来自维基教科书,开放的书籍,开放的世界

DOS 编程模型及其笨拙的批处理脚本功能很快就被淘汰,微软需要在 Windows 中添加一个替代的脚本环境。由此产生的就是 **Windows 脚本宿主** (WSH)。WSH 有两种形式:控制台模式版本 (csh.exe 或 cscript.exe) 和非控制台版本 (wsh.exe 或 wscript.exe)。

WSH 语言

[编辑 | 编辑源代码]

WSH 实际上并不是一种新语言,而是一个用于在其他 **Active Scripting** 语言中进行编程的环境。Active Scripting 语言是以 COM 组件形式实现的编程语言。您计算机上安装的任何 Active Scripting 语言都可以与 WSH 一起使用。默认情况下,WSH 可以使用 JScript 和 VBScript 进行编程,但也可以安装其他 Active Scripting 语言并在 WSH 中运行。其中一个更流行的第三方 Active Scripting 语言是 PerlScript,它通常作为 ActivePerl 发行版的一部分安装。

WSH 脚本还包含一定量的 XML 代码,这些代码有助于控制正在运行的脚本的环境。用于脚本的语言必须在 XML 标签中指定。

WSH 是一个面向对象的编程环境,WSH 提供了大量的对象,Active Scripting 语言可以利用这些对象。

另一种 Microsoft 技术,**Active Server Pages** (ASP) 类似于 WSH,因为它是一个语言中立的脚本环境,使用安装的 Active Scripting 语言。但是,ASP 用作生成网页的服务器端脚本工具。相比之下,WSH 更适合用于脚本本地环境(尽管 WSH 也可以用作服务器端网站脚本引擎,如果你敢的话!)。

编写 WSH 脚本

[编辑 | 编辑源代码]

WSH 脚本文件是一个纯文本文件,可以使用通用的“.wsh”文件扩展名。此外,许多其他文件扩展名与 WSH 相关联,并且可能比简单的 .wsh 扩展名更具描述性。例如,一个主要使用 VBScript 的 WSH 脚本可能具有“.vbs”扩展名,而一个使用 JScript 的 WSH 脚本可能具有“.js”扩展名。

每个 WSH 文件都必须有一个 XML “JOB” 对象。每个脚本可能有多个作业,但每个作业必须具有唯一的 ID。例如,以下是一些示例作业标签

<job id="Task1">
<job id="GetHarddriveInfo">
<job id="CreateLogFile">

接下来,我们必须指定将用于实现特定作业的脚本语言

<script language="JScript" src="IncludeFile.js"/>
<script language="VBScript">

从示例中可以看出,我们可以将外部源文件包含到我们的脚本文件中以供运行。在一个作业对象中,所有指令从上到下执行。在每个作业中,我们可能有多种不同的脚本语言在使用,它们位于单独的块中。

在脚本部分的末尾,我们必须使用“</script>”标签关闭标签。在作业结束时,我们使用“</job>”标签关闭。

"WScript" 对象

[编辑 | 编辑源代码]

WSH 提供了 **WScript** 对象,该对象具有一些方法和字段,可在 WSH 脚本中使用。WScript 对象不需要实例化,并且始终在任何脚本中可用。例如,WScript 对象的“Echo”方法打印出特定字符串。WSH 的 csh.exe(控制台版本)将字符串打印到控制台,而 wsh.exe(非控制台版本)将字符串打印到消息框中。以下是一个多语言示例

<job id="TestEcho">
   <script language="Jscript">
       WScript.Echo("Printing from JScript");
   </script>
   <script language="VBScript">
       WScript.Echo "Printing from VBScript"
   </script>
   <script language="PerlScript">
       $WScript->Echo("Printing from PerlScript");
   </script>
</job>

当然,如果您还没有在计算机上安装 PerlScript,则无法使用它。

XML 标签

[编辑 | 编辑源代码]

WSH 脚本中可以使用许多其他 XML 标签。

<description >

[编辑 | 编辑源代码]

<description> 标签包含一定数量的纯文本,用于描述当前文件。例如

<description> 
  This script writes a status entry to the log file, and updates the website. 
</description>

现在,这似乎是编写注释的一种很困难的方式,但 <description> 标签还有另一个用途。假设我们将上面的代码段保存到一个脚本文件中,例如“testdesc.wsh”。现在,如果我们使用“/?”参数运行我们的脚本,我们将得到以下结果

C:\>testdesc.wsh /?
This script writes a status entry to the log file, and updates the website.

当我们向脚本发送“/?”参数时, <description> 标签中写入的所有文本都会打印到控制台。

华夏公益教科书