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程序員參考手冊》