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) Next3. 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:該屬性獲取或更改當前活動目錄。返回一個字符串,其中包含當前活躍進程的當前工作目錄的完整有效路徑名。
- 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就會返回默認的值。所以要讀取一個鍵的默認值,只要指定鍵的名稱即可。
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脚本宿主介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序——校园服务小程序(二)校园论
- 下一篇: R语言 trim=0.1 tirm=0.