Windows脚本宿主(Windows Script Host, WSH)是一个Windows管理工具。WSH建立了一个脚本运行的主环境,WSH使脚本可以使用对象和服务,并提供脚本执行的准则。WSH还负责安全管理以及调用适当的脚本引擎。html
使用Windows脚本宿主运行脚本程序员
WSH提供了两个用于执行脚本的接口,这两个接口各使用不一样的宿主程序做为VBScript引擎:shell
cscript.exe:用于在命令行中运行脚本,数组
wscript.exe:用于在Windows环境中运行脚本,直接与Windows GUI进行交互。安全
这二者就功能来说几乎没有区别。网络
Windows脚本宿主的内建对象工具
1.WScript对象:WSH对象模型的基础。ui
属性:this
Arguments,FullName,Interactive,Name,Path,ScriptFullName,ScriptName,StdErr,StdIn,StdOut,Version.spa
方法:
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对象提供从命令行中对无名参数的访问。
5.WshShell对象:用于获取系统环境变量的访问、建立快捷方式、访问Windows的特殊文件夹,如Windows Desktop,以及添加或删除注册表条目,还可以使用Shell对象的功能建立更多的定制对话款以进行用户交互。
1)访问WshShell对象:要想使用WshShell对象的属性和方法,必须建立一个WScript.Shell对象的实例。这样之后对WshShell对象的引用实际就是对新建立实例的引用。
Set WshShell = WScript.CreateObject("WScript.Shell")
2)WshShell对象的属性:
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Echo WshShell.CurrentDirectory
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")
object.SpecialFolders(objWshSpecialFolders)
下例将Start Menu文件夹保存在变量strDesktop变量中
strDesktop = WshShell.SpecialFolders("StartMenu")
3)WshShell对象的方法(11个方法,均与操做系统shell相关)
用法: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>
用法: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>
用法:object.ExpandEnvironmentStrings(strString)
strString为一个字符串值,表示想要扩充的环境变量的名称。
Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Echo "Then path to WinDir is " _
& WshShell.ExpandEnvironmentStrings("%WinDir%")
用法: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
用法: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 |
用法:object.RegRead(strName)
一个键值包含三部分:若是指定了键名(相对于键值名来讲),RegRead就会返回默认的值。因此要读取一个键的默认值,只要指定键的名称便可。
RegRead方法返回的值有5种类型:
类型 | 描述 | 形式 |
REG_SZ | 字符串 | 字符串 |
REG_DWORD | 数字 | 整数 |
REG_BINARY | 二进制值 | 整数构成的VBArray |
REG_EXPAND_SZ | 可扩充字符串(例如%windir%\\notepad.exe) | 字符串 |
REG_MULTI_SZ | 字符串数组 | 字符串构成的VBArray |
用法: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\"
用法: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
用法:object.SendKeys(string)
要发送一个单独的键盘字符,只要将该字符自己做为字符串参数发送便可,如"x";
也能够发送屡次击键,如,要发送击键x、y和z,能够发送字符串参数"xyz";
要发送特殊字符,包括圆括弧、尖括弧、花括弧以及加号(+),上尖号(^),百分号(%),波浪号(~),能够将它们包含在一对花括弧"{}"中间,如发送加号,能够发送字符串"{+}"。
6. WshNetwork对象: WshNetwork对象提供对计算机所链接的网络上共享资源的访问。
1)访问WshNetwork对象: 经过建立WScript.Network对象的实例实现。
2)WshNetwork对象的属性:
下例用到了这三个属性:
<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程序员参考手册》