zoukankan      html  css  js  c++  java
  • VBScript: Windows脚本宿主介绍

    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
    otepad.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 "HKCUSoftwareWROXVBScript",1,"REG_BINARY"
    WshShell.RegWrite "HKCUSoftwareWROXVBScriptProgRef","VB_is_great","REG_SZ"
    'RegRead部分
    bKey = WshShell.RegRead("HKCUSoftwareWROXVBScript")
    WScript.Echo WshShell.RegRead("HKCUSoftwareWROXVBScriptProgRef")
    'RegDelete部分
    WshShell.RegDelete "HKCUSoftwareWROXVBScriptProgRef"
    WshShell.RegDelete "HKCUSoftwareWROXVBScript"
    WshShell.RegDelete "HKCUSoftwareWROX"
    • 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程序员参考手册》

  • 相关阅读:
    【网易官方】极客战记(codecombat)攻略-森林-加农炮之舞forest-cannon-dancing
    【网易官方】极客战记(codecombat)攻略-森林-森林慢跑forest-jogging
    https://developer.android.com/codelabs/java-to-kotlin
    今日英语
    架构师技能图谱
    java接口防重提交如何处理
    看看人家那后端API接口写得,那叫一个优雅!
    MySQL不推荐使用uuid或者雪花id作为主键
    “12306”是如何支撑百万QPS的?
    阿里巴巴为什么能抗住90秒100亿?看完这篇你就明白了!
  • 原文地址:https://www.cnblogs.com/ITGirlXiaoXiao/p/3191100.html
Copyright © 2011-2022 走看看