VBScript: Windows腳本宿主介紹

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對象提供從命令行中對無名參數的訪問。

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

相關文章
相關標籤/搜索