Windows脚本宿主(Windows Script Host, WSH)是一个Windows管理工具。WSH创建了一个脚本运行的主环境,WSH使脚本能够使用对象和服务,并提供脚本执行的准则。WSH还负责安全管理以及调用适当的脚本引擎。

使用Windows脚本宿主运行脚本

WSH提供了两个用于执行脚本的接口,这两个接口各使用不同的宿主程序作为VBScript引擎:

cscript.exe:用于在命令行中运行脚本,

wscript.exe:用于在Windows环境中运行脚本,直接与Windows GUI进行交互。

这两者就功能来讲几乎没有区别。

Windows脚本宿主的内建对象

1.WScript对象:WSH对象模型的基础。

属性:

Arguments,FullName,Interactive,Name,Path,ScriptFullName,ScriptName,StdErr,StdIn,StdOut,Version.

方法:

CreateObject,ConnectObject,DisconnectObject,Echo,GetObject,Quit,Sleep

2.WshArgument对象:是一个由WScript对象的Arguments属性返回的集合(WScript.Arguments),下面为遍历WshArguments集合的简单循环,依次显示每个元素:

Set objArgs = WScript.Arguments
For x = 0 To objArgs.Count - 1
    WScript.Echo objArgs(x)
Next

3. WshNamed对象:WshNamed对象提供从命令行中对有名参数的访问。

4. WshUnnamed对象:WshNamed对象提供从命令行中对无名参数的访问。

  • 使用WshArguments对象访问整个参数集合。
  • 使用WshNamed对象访问有名字的参数。
  • 使用WshUnamed对象访问没有名字的参数。

5.WshShell对象:用于获取系统环境变量的访问、创建快捷方式、访问Windows的特殊文件夹,如Windows Desktop,以及添加或删除注册表条目,还可使用Shell对象的功能创建更多的定制对话款以进行用户交互。

1)访问WshShell对象:要想使用WshShell对象的属性和方法,必须创建一个WScript.Shell对象的实例。这样以后对WshShell对象的引用实际就是对新创建实例的引用。

Set WshShell = WScript.CreateObject("WScript.Shell")

2)WshShell对象的属性:

  • CurrentDirectory:该属性获取或更改当前活动目录。返回一个字符串,其中包含当前活跃进程的当前工作目录的完整有效路径名。
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Echo WshShell.CurrentDirectory

  • Environment: 该属性返回WshEnvironment对象(一个环境变量集合)。

object.Environment([strType])

strType:可选,指定环境变量的位置。包括:System,User,Volatile,Process

下例返回系统中存在的处理器个数。

Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshSysEnv = WshShell.Environment("SYSTEM")
WScript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")

  • SpecialFolders: 该属性返回一个SpecialFolders对象(一个特殊文件夹集合)。如果被请求的文件夹不可用,SpecialFolders属性将返回一个空字符串。

object.SpecialFolders(objWshSpecialFolders)

下例将Start Menu文件夹保存在变量strDesktop变量中

strDesktop = WshShell.SpecialFolders("StartMenu")

3)WshShell对象的方法(11个方法,均与操作系统shell相关)

  • AppActivate:该方法用于激活一个指定的已经打开的应用程序窗口。返回一个Boolean类型的值,标志着过程调用是否成功。这个方法用于将焦点切换至指定名称的应用程序或窗口。

用法:object.AppActivate title

下例为打开计算器,并使用计算器计算3*5=15的过程(要运行下面的代码,需要将其保存为.wsf扩展名的Windows脚本宿主文件)。

<package>
    <job id="vbs">
        <script language="VBScript">
        Set WshShell = WScript.CreateObject("WScript.Shell")
        WshShell.Run "calc"
        WScript.Sleep 100
        WshShell.AppActivate "Calculator"
        WScript.Sleep 100
        WshShell.SendKeys "1{+}"
        WScript.Sleep 500
        WshShell.SendKeys "3"
        WScript.Sleep 500
        WshShell.SendKeys "~"
        WScript.Sleep 500
        WshShell.SendKeys "*5"
        WScript.Sleep 500
        WshShell.SendKeys "~"
        WScript.Sleep 2500
        </script>
    </job>
</package>

  • CreateShortcut: 该方法用于创建一个新的快捷方式,或打开一个已有的快捷方式。要创建一个快捷方式,必须完成下列三个步骤:

    • 创建WshShortcut对象的一个实例。
    • 初始化其属性。
    • 使用Save方法将其保存到磁盘。

用法:object.CreateShortcut(strPathname)

下例创建了一个记事本的快捷方式到桌面:

<package>
    <job id="vbs">
        <script language="VBScript">
        Set WshShell = WScript.CreateObject("WScript.Shell")
        strDesktop = WshShell.SpecialFolders("Desktop")    
        Set oShellLink = WshShell.CreateShortcut(strDesktop & _
    "\Shortcut Script.lnk")
        oShellLink.TargetPath = "%windir%\system32\notepad.exe"
        oShellLink.WindowStyle = 1
        oShellLink.Hotkey = "CTRL+SHIFT+N"
        oShellLink.IconLocation = "nopepad.exe, 0"
        oShellLink.Description = "Shortcut to Notepad"
        oShellLink.WorkingDirectory = strDesktop
        oShellLink.Save        
        </script>
    </job>
</package>

  • ExpandEnvironmentStrings: 该方法返回环境变量的扩充值,且只对PROCESS环境空间内定义的环境变量进行扩充。环境变量的名称必须以"%"包围,并且是大小写不敏感的。

用法:object.ExpandEnvironmentStrings(strString)

strString为一个字符串值,表示想要扩充的环境变量的名称。

Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Echo "Then path to WinDir is " _
& WshShell.ExpandEnvironmentStrings("%WinDir%")

  • LogEvent: 该方法用于向日志文件中添加一个事件条目。
  • Popup: 该方法用于在弹出式消息框中显示文本。无论使用哪种宿主可执行文件(wscript.exe或cscript.exe)运行脚本,都可以使用Popup方法显示一个消息框。

用法:intButton = object.Popup(strText,[nSecondsToWait],[strTitle],[nType])

strText: 一个字符串值,包含了想要显示在弹出式消息框中的文本。

nSecondsToWait: 一个数值,表示想要弹出式消息框现实的最长时间(以秒为单位)。默认值为0,表示弹出式消息框一直可见,直到被关闭。

strTitle: 一个字符串值,指定想要出现在弹出式消息框标题栏中的文本。若不指定,默认值为"Windows Script Host"。

nType: 一个数值,表示想在弹出式消息框中出现的按钮和图标的类型。

IntButton: 一个整数值,表示关闭消息框时单击的按钮的序号,这个值是由Popup方法返回的。

下面三个表格分别列出按钮类型、图标类型、关闭消息框是所单击的按钮的编号:

按钮类型:

描述
0 显示OK按钮
1 显示OK和Cancel按钮
2 显示Abort、Retry和Ignore按钮
3 显示Yes、No和Cancel按钮
4 显示Yes和No按钮
5 显示Retry和Cancel按钮

图标类型:

描述
16 显示中止(Stop Mart)图标
32 显示问号(Question Mart)图标
48 显示叹号(Exclamation Mark)图标
64 显示提示信息(Information Mark)图标

关闭消息框时所单击的按钮的编号:

描述
1 OK按钮
2 Cancel按钮
3 Abort按钮
4 Retry按钮
5 Ignore按钮
6 Yes按钮
7 No按钮

举例:

Dim WshShell, BtnCode
Set WshShell = WScript.CreateObject("WScript.Shell")
 
BtnCode = WshShell.Popup("Do you like this code?", 7, "Quick survey:", 4 + 32)
 
Select Case BtnCode
    Case 6 WScript.Echo "Glad to hear it - Thanks!"
    Case 7 WScript.Echo "I'm sorry you didn't like it."
    Case -1 WScript.Echo "Helllloooooooo?"
End Select

  • RegDelete: 该方法从注册表中删除一个键或其键值。如果strName以反斜杠结尾,就可以指定键名,如果不使用反斜杠,就可以指定键值名。

用法:object.RegDelete(strName)

下表给出了根键名及其缩写:

根键名 缩写
HKEY_CURRENT_USER HKCU
HKEY_LOCAL_MACHINE HKLM
HKEY_CLASSES_ROOT HKCR
HKEY_USERS HKEY_USERS
HKEY_CURRENT_CONFIG HKEY_CURRENT_CONFIG
  • RegRead: 该方法返回注册表中一个键或键值的名称。

用法:object.RegRead(strName)

一个键值包含三部分:如果指定了键名(相对于键值名来说),RegRead就会返回默认的值。所以要读取一个键的默认值,只要指定键的名称即可。

  1. 名称(Name)
  2. 数据类型(Data Type)
  3. 值(Value)

RegRead方法返回的值有5种类型:

类型 描述 形式
REG_SZ 字符串 字符串
REG_DWORD 数字 整数
REG_BINARY 二进制值 整数构成的VBArray
REG_EXPAND_SZ 可扩充字符串(例如%windir%\\notepad.exe) 字符串
REG_MULTI_SZ 字符串数组 字符串构成的VBArray
  • RegWrite: 该方法可以创建一个新键,给现有键添加另一个键值名(并制定一个值),或修改现有键值名的值。

用法:object.RegWrite(strName, anyValue [,strType])

strName: 一个字符串值,表示想要创建、添加或修改的键名、键值名或键值。

anyValue: 想要创建的新键的名称,或想添加到现有键的键值名,或想指定给某个现有键值名的新键值。

strType: 一个表示键值数据类型的字符串。RegWrite方法不支持REG_MULTI_SZ类型,支持上表中的其余四种类型。

Dim WshShell, bKey
Set WshShell = WScript.CreateObject("WScript.Shell")
'RegWrite部分
WshShell.RegWrite "HKCU\Software\WROX\VBScript\",1,"REG_BINARY"
WshShell.RegWrite "HKCU\Software\WROX\VBScript\ProgRef","VB_is_great","REG_SZ"
'RegRead部分
bKey = WshShell.RegRead("HKCU\Software\WROX\VBScript\")
WScript.Echo WshShell.RegRead("HKCU\Software\WROX\VBScript\ProgRef")
'RegDelete部分
WshShell.RegDelete "HKCU\Software\WROX\VBScript\ProgRef"
WshShell.RegDelete "HKCU\Software\WROX\VBScript\"
WshShell.RegDelete "HKCU\Software\WROX\"

  • Run: Run方法在一个新进程中运行一个程序。

用法:object.Run(strCommand,[intWindowStyle],[bWaitOnReturn])

在AppActivate方法示例中已经用到过Run方法。下例代码打开命令提示符窗口并显示C盘内容:

Dim oShell
Set oShell = WScript.CreateObject("WScript.Shell")
oShell.Run "cmd /K CD C:\ & Dir"
Set oShell = Nothing

  • SendKeys: SendKeys方法向活跃窗口发送一次或多次击键(仿佛来自键盘)。

用法:object.SendKeys(string)

要发送一个单独的键盘字符,只要将该字符本身作为字符串参数发送即可,如"x";

也可以发送多次击键,如,要发送击键x、y和z,可以发送字符串参数"xyz";

要发送特殊字符,包括圆括弧、尖括弧、花括弧以及加号(+),上尖号(^),百分号(%),波浪号(~),可以将它们包含在一对花括弧"{}"中间,如发送加号,可以发送字符串"{+}"。

  • Exec: Exec方法在一个子命令解释器中运行一个应用程序,子命令解释器提供对StdIn、StdOut和StdErr流的访问。该方法只能执行命令行应用程序,并且不能用于运行远程脚本。

6. WshNetwork对象: WshNetwork对象提供对计算机所连接的网络上共享资源的访问。

1)访问WshNetwork对象: 通过创建WScript.Network对象的实例实现。

2)WshNetwork对象的属性:

  • ComputerName
  • UserDomain
  • UserName

下例用到了这三个属性:

<package>
    <job id = "vbs">
        <script language="VBScript">
        Set WshNetwork = WScript.CreateObject("WScript.Network")
        WScript.Echo "Domain = " & WshNetwork.UserDomain
        WScript.Echo "Computer Name = " & WshNetwork.ComputerName
        WScript.Echo "User Name = " & WshNetwork.UserName
        </script>
    </job>
</package>

3)WshNetwork对象的方法:

AddWindowsPrinterConnection: 在计算机系统中添加一个Windows打印机连接。

AddPrinterConnection: 在计算机系统中添加一个远程打印机连接。

EnumPrinterDrives:返回当前网络驱动器的映射信息。

EnumPrinterConnection:返回当前网络打印机的映射信息。

MapNetworkDrive:在计算机系统中添加一个共享网络驱动器。

RemoveNetworkDrive:在计算机系统中删除一个共享的网络驱动器。

RemovePrinterConnection:在计算机系统中删除一个共享的网络打印机连接。

SetDefaultPrinter:将某个远程打印机指定为默认打印机。

7.WshEnvironment对象:提供对Windows环境变量集合的访问。

属性方法略。

8. WshSpecialFolders对象:提供对Windows特殊文件夹集合的访问。

属性方法略。

9. WshShortcut对象:允许使用脚本创建快捷方式。

属性方法略。

10. WshUrlShortcut对象:允许使用脚本创建到Internet资源的快捷方式。

属性方法略。

本文参考资料:

《VBScript程序员参考手册》

转载于:https://www.cnblogs.com/ITGirlXiaoXiao/p/3191100.html

VBScript: Windows脚本宿主介绍相关推荐

  1. VBScript之Windows 脚本宿主

    文章目录 1 WSH 的概念 1.1 脚本文件类型 1.2 使用 Windows 脚本宿主运行脚本 1.2.1 命令行执行 1.2.2 在 Windows 环境中执行 WSH 1.2.3 两种脚本区别 ...

  2. windows脚本编制引擎_说说 Windows 脚本宿主运行的几种方式

    1.在命令提示符下运行脚本 使用 Windows 脚本宿主,可以在命令提示符下运行脚本.CScript.exe 提供了用于设置脚本属性的命令行开关. 使用 CScript.exe 运行脚本 用下列语法 ...

  3. 没有在该机执行windows脚本宿主的权限_解决办法

    转载自:http://blog.sina.com.cn/s/blog_575a5980010096x3.html 前几天刚装一系统,使用雨林木风的经典怀旧GHOST安装版.准备安排后台运行一VBS脚本 ...

  4. PowerShell2.0之与COM对象交互(五)与脚本宿主代码协同工作

    网络中存在大量由VBScript和Jscript或者其他Windows脚本宿主相关的语言编写的代码,其中相当一部分用对应语言实现很简短,而且有部分代码甚至不能转换为PowerShell代码.丢弃所有这 ...

  5. Windows脚本编写

    一.关于脚本语言 脚本语言就是由专用解释器以行为单位解释执行的一种文本形式编程语言,象Windows的批处理.Unix/Linux的shell.perl和awk等脚本语言都属于这个范畴.它们大多都是由 ...

  6. 菜鸟也来编程序 Windows脚本一日通

    看点: 你知道吗?为什么现在脚本病毒如此猖獗? 你知道吗?编写一个脚本病毒其实非常简单! 你知道吗?根本不懂编程的你只要稍加操练也能编出不错的软件! Windows脚本就像魔法卷轴般神奇,编写起来也很 ...

  7. Windows脚本初探之Windows Script Host(WSH)

    Windows脚本是一种解释型语言编写的程序,它是通过COM对象模型访问OS组件.至于什么是COM对象模型,可参见网址http://baike.baidu.com/link?url=TCoRIQ2ff ...

  8. 使用 Windows 脚本文件 (.wsf)

    使用 Windows 脚本文件 (.wsf) Windows 脚本文件 (*.wsf) 是含有可扩展标记语言 (XML) 代码的文本文档.它综合了几个可增强脚本灵活性的功能.由于 Windows 脚本 ...

  9. [转载]初识Windows 脚本文件(*.wsf)

    初识Windows 脚本文件(*.wsf) Windows 脚本文件(*.wsf) 是含有可扩展标记语言 (XML) 代码的文本文档,它综合了几个可增强脚本灵活性的功能.由于 Windows 脚本文件 ...

  10. VBScript (vbs) 脚本实例

    欢迎小伙伴的点评✨✨ 文章目录 前言 一.vbs是什么? 二.简单使用VBScript实例 2.1.msgbox实例 2.2.VBScript 的变量 三.VBScript 输出文本及键盘按键到cmd ...

最新文章

  1. 【Flutter】如何写一个Flutter自动打包成iOS代码模块的脚本
  2. 习题1.8 二分查找 (20 分)
  3. 面对百亿用户数据,日均亿次请求,携程应用架构如何涅槃?
  4. python(五)模块
  5. IIS7.5配置对PHP的支持
  6. How to enable product text HTML editor
  7. PIC32单片机harmony开发环境 - uart例程和代码分析
  8. 我是怎么用机器学习技术找到女票的
  9. (JAVA)List
  10. python语言基本认识_Python基础语法合集——了解python
  11. 从零实现深度学习框架——实现常见运算的计算图(下)
  12. 学计算机激励标语口号,关于学习的励志口号标语(精选160句)
  13. 2021年中国理财产品行业之新发行银行理财产品概览,中国银行发行2359只,位居榜首「图」
  14. win10提高开机速度只需要5步
  15. Unicode双向算法详解(bidi算法)(三)
  16. 【学习笔记】C++ GUI Qt4 第六章 6.4 滚动区域 和 6.5 停靠窗口和工具栏
  17. DOTCPP:有关1148心得
  18. C++ 实现哈夫曼树和哈夫曼编码
  19. OSGi架构学习与设计
  20. cinta作业7:同态同构商群正规子群

热门文章

  1. ArcMap|地理探测器(geoDetector)前在ArcGIS中的处理
  2. Dymola — 多学科系统仿真平台
  3. css三种标签隐藏方法(及它们用法区别), css显隐性问题
  4. Jsoup爬虫并解析网页
  5. XX 公司网络信息系统的安全方案设计书
  6. EPLAN P8.2.7 学习版安装教程(适用于 Win10 64位)
  7. 使用Python基于BibTeX引用格式自动生成文献的IEEE引用格式
  8. PBRT——零基础到完全吃透系列
  9. 【FPGA】QuartusII_13.1安装及破解
  10. java编程用什么文本编辑器_编程必备,程序员应该都知道的7款文本编辑器