定義
“Windows Scripting Host“,其通用的中文譯名為“Windows
腳本宿主”。對於這個較為抽象的名詞,我們可以先作這樣一個籠統的理解:它是內嵌於 Windows 作業系統中的
腳本語言工作環境。
Windows Scripting Host 這個概念最早出現於 Windows 98 作業系統。大家一定還記得 MS-Dos 下的批處理命令,它曾有效地簡化了我們的工作、帶給我們方便,這一點就有點類似於如今大行其道的
腳本語言。但就算我們把批處理命令看成是一種
腳本語言,那它也是 98 版之前的 Windows 作業系統所唯一支持的“腳本語言”。而此後隨著各種真正的
腳本語言不斷出現,批處理命令顯然就很是力不從心了。面臨這一危機,
微軟在研發 Windows 98 時,為了實現多類
腳本檔案在 Windows 界面或 Dos
命令提示符下的直接運行,就在系統內植入了一個基於 32 位 Windows 平台、並獨立於語言的腳本運行環境,並將其命名為“Windows Scripting Host”。WSH 架構於 ActiveX 之上,通過充當 ActiveX 的
腳本引擎控制器,WSH 為 Windows 用戶充分利用威力強大的腳本指令語言掃清了障礙。
再具體一點描述:你自己編寫了一個
腳本檔案,如後綴為 .vbs 或 .js 的檔案,然後在 Windows 下雙擊並執行它,這時,系統就會自動調用一個適當的程式來對它進行解釋並執行,而這個程式,就是 Windows Scripting Host,程式執行檔案名稱為 Wscript.exe (若是在命令行下,則為 Cscript.exe)。
WSH 誕生後,在 Windows 系列產品中很快得到了推廣。除 Windows 98 外,微軟在 Internet Information Server 4.0、Windows Me、Windows 2000 Server,以及 Windows 2000 Professional 等產品中都嵌入了 WSH。現在,早期的 Windows 95 也可單獨安裝相應版本的 WSH。(附:各種版本 WSH 的安裝程式可以從 http://msdn.microsoft.com/scripting 站點下載)。
作用
WSH 的設計,在很大程度上考慮到了“非互動性
腳本(noninteractive scripting)”的需要。在這一指導思想下產生的 WSH,給
腳本帶來非常強大的功能,例如:我們可以利用它完成
映射網路驅動器、檢索及修改環境變數、處理
註冊表項等工作;管理員還可以使用 WSH 的支持功能來創建簡單的登入腳本,甚至可以編寫腳本來管理
活動目錄。
而事實上,上述功能的實現,均與 WSH 內置的多個對象密切相關,這些內置對象肩負著直接處理
腳本指令的重任。因此,我們也可以通過了解 WSH 的內置對象來探尋 WSH 可以實現的功能。
圖 1 是 WSH 的內置對象構成情況。
從圖中我們可以看出,WSH 共有 14 個內置對象,它們各自有著明確分工。具體而言,位於最底部的 Wscript ,主要作用是提取命令行變數,確定
腳本檔案名,確定 WSH 執行檔案名稱(wscript.exe 還是
cscript.exe),確認 host 版本信息,創建、關連及分離 COM 對象,寫入事件,按程式結束一個腳本檔案的運行,向默認的輸出設備(如對話框、命令行)輸出信息等;
WshArguments的作用是獲取全部的命令行變數; WshNamed 負責獲取指定的
命令行參數集;WshUnnamed 負責獲取未經指定的命令行參數集;WshNetwork 的主要作用是開放或關閉網路共享,連線或斷開網路印表機,映射或取消網路中的共享,獲取當前登入用戶的信息;WshController 可以創建一個遠程腳本對象;WshRemote 可以實現網路中對
計算機系統的遠程管理,也可按計畫對其它程式/腳本進行處理;WshRemote Error 的作用在於:當一個遠程腳本(WshRemote 對象)因
腳本錯誤而終止時,獲取可用的
錯誤信息;WshShell 主要負責程式的本地運行,處理
註冊表項、創建
捷徑、獲取
系統資料夾信息,處理
環境變數;WshShortcut 主要用於按計畫創建捷徑;WshSpecialfolders 用於獲取任意一個 Windows 特殊資料夾的信息;WshURLShortcut 用於按程式要求創建進入網際網路資源的捷徑;WshEnvironment 用於獲取任意的環境變數(如 WINDIR, PATH, 或 PROMPT);WshScriptExec 用於確定一個腳本檔案的運行狀態及錯誤信息。
在這些內置對象的幫助下,我們就可以利用 WSH 充分發揮 VBScript 及 JScript 等
腳本的強大威力,極大地提高我們的工作效率。
工作原理
WSH 的工作流程,實際上就是
腳本檔案被解析並執行的過程。我們知道,現在
腳本經常會被植入網頁,其中包括 HTML 頁面(客戶機端)和 ASP 頁面(伺服器端)。對於植入 HTML 頁面的
腳本,其所需的解析引擎會由 IE 這樣的
網頁瀏覽器載入;對於植入 ASP 頁面的腳本,其所需的解析引擎會由 IIS(Internet Information Services)提供。
而對於出現在 HTML 和 ASP 頁面之外的
腳本(它們常以獨立的檔案形式存在),就需要經由 WSH 來處理了。在這裡要插一句“廢話”:WSH 的正常工作的前提,是你必須安裝了
微軟3.0 或更高版本的 IE,因為 WSH 在工作時會調用 IE 中的 VBScript 和 JScript 解析引擎。
現在,就讓我們來看看
腳本檔案經由 WSH 執行的過程。為了更加直觀,筆者根據有關資料繪製了一幅工作流程圖(圖2),從圖中大家能對 WSH 在
腳本檔案運行中所起到的作用有個理性認識。對於這個流程圖,還需要補充兩點:1、圖中第(2、3)步,WSH 根據腳本檔案後綴名,到
系統註冊表中查詢所需的
腳本引擎時,VBScript 和 JScript 兩種語言的解析引擎是 Windows 系統中原有的,而其它
腳本語言的解析引擎,如 PERL、TCL等,需要用戶另行定義;2、第(5)步執行腳本命令時,一些腳本指令會使用到 WSH 內置對象所提供的服務(參見本文第二部分),例如處理
註冊表項。這時,
腳本指令就會向 WSH 提出請求,並由 WSH 完成所需任務。也正是在這一步,WSH 的功用得到了淋漓盡致的發揮。
四、WSH 怎么用?
談到這個問題,就不太好講了。正如前面所述,WSH 實際上是一個腳本語言的運行環境,它之所以具備強大的功能,是在於充分挖掘了腳本語言的潛力。因此,如果拋開腳本語言而空談 WSH ,那實際上就沒有了意義。而如果再展開來講述腳本語言,顯然就離開了今天的主題。
在這種情況下,只好採取一種折衷的方法:給大家推薦幾個
腳本檔案利用 WSH 執行任務的實例,希望大家能通過這些例子對 WSH 的使用有一個初步的了解。
腳本檔案的編寫十分方便,你可以選用任意一個文字編輯軟體進行編寫,寫完後,你只需將它保存為 WSH 所支持的檔案名稱就行了(如 ..js 檔案、.vbs 檔案)。最常用的編輯器當然就是我們的
記事本(Notepad)了,下面的實例都是以它作為工具編寫的。
準備好了嗎?讓我們先來看一個最簡單的例子吧。打開記事本,在上面寫下:
WScript.Echo("走近 WSH")
好了,將它保存為以 ..vbs 或 .js 為後綴名(可千萬不要弄成了 ..txt)的檔案並退出
記事本。雙擊執行這個檔案,看看結果吧,是不是很有意思?
有了第一印象後,我們繼續往下看。
這一次,我們要利用 WSH 完成一次創建十個資料夾的工作。代碼如下:
dim objdir
set objdir=wscript.createobject("scripting.filesystemobject")
for k=1 to 10
anewfolder="c:\chapter" & k
objdir.createfolder(anewfolder)
next
同樣,將它存為 .vbs 檔案並退出。運行後,我們會發現,C 盤根目錄下一次性多出了十個新資料夾。
最後,再舉一個在伺服器上的運用。下面的代碼將幫助你重新啟動指定的 IIS 服務:
' define a constant for stopped services
Const ADS_SERVICE_STOPPED = 1
' get an ADSI object for a computer
Set objComputer = GetObject("WinNT://MYCOMPUTER,computer")
' get an object for a service
Set objService = objComputer.GetObject("Service","MYSERVICE")
' check to see if the service is stopped
If (objService.Status = ADS_SERVICE_STOPPED) Then
' if the service is stopped, then start it
objService.Start
End If
將它以 startsvc.vbs 為名保存在 C: 盤根目錄。並通過如下命令執行:CSCRIPT C:\STARTSVC.VBS 。運行後,經你指定的 IIS 服務項將被重新開啟。
已經舉了三個例子,其實,在 Windows 的 samples 目錄下,有個 WSH 資料夾,那裡面有不少很具代表性的 .vbs 和 .js
腳本檔案。大家有空可以打開來看看,相信會受益匪淺的。
此外,利用 WSH ,我們還可以自己編寫
腳本檔案來提高網路管理方面的效率。但由於受條件限制,本人在這方面的使用心得並不多,因此也就不好多說了^_^。不過,網上這方面現成的代碼倒是很多,大家有興趣可以去研究一下。
缺點
答案當然是肯定的。任何事物都有兩面性,WSH 也不例外。應該說,WSH 的優點在於它使我們可以充分利用
腳本來實現計算機工作的自動化;但不可否認,也正是它的這一特點,使我們的系統又有了新的安全隱患。許多
計算機病毒製造者正在熱衷於用
腳本語言來編制病毒,並利用 WSH 的支持功能,讓這些隱藏著病毒的腳本在網路中廣為傳播。去年曾名燥一時的 I Love You 便是一個典型代表。因此,大家對於來歷不明、尤其是郵件附屬檔案里的一些
腳本檔案還是應該保持戒備。至於相應的防範措施,筆者在別的文章中已有論述,在此就不再囉嗦了。
以上文字,希望能對大家認識 WSH 有所幫助。在運用過程中,大家若有什麼心得或發現,別望了一起分享喔。
看不清圖片請到這裡看原文