WSH--這個(gè)在詞典中都很難找尋的名詞,對(duì)許多朋友來講也許還比較陌生。但正是WSH ,使 Windows 操作系統(tǒng)具備了更為強(qiáng)大的功能。它讓我們?cè)谑褂孟到y(tǒng)時(shí)擁有了許多的便利,但同時(shí),也讓我們的電腦遭遇了不少的麻煩。下面,就讓我們一步步走進(jìn) WSH 的神秘世界,共同評(píng)判它的是非功過。
WSH 是“Windows Scripting Host”的縮略形式,其通用的中文譯名為“Windows 腳本宿主”。對(duì)于這個(gè)較為抽象的名詞,我們可以先作這樣一個(gè)籠統(tǒng)的理解:它是內(nèi)嵌于 Windows 操作系統(tǒng)中的
腳本語言工作環(huán)境。
Windows Scripting Host 這個(gè)概念最早出現(xiàn)于 Windows 98 操作系統(tǒng)。大家一定還記得 MS-Dos 下的批處理命令,它曾有效地簡化了我們的工作、帶給我們方便,這一點(diǎn)就有點(diǎn)類似于如今大行其道的腳本語言。但就算我們把批處理命令看成是一種腳本語言,那它也是 98 版之前的 Windows 操作系統(tǒng)所唯一支持的“腳本語言”。而此后隨著各種真正的腳本語言不斷出現(xiàn),批處理命令顯然就很是力不從心了。面臨這一危機(jī),微軟在研發(fā) Windows 98 時(shí),為了實(shí)現(xiàn)多類腳本文件在 Windows 界面或 Dos 命令提示符下的直接運(yùn)行,就在系統(tǒng)內(nèi)植入了一個(gè)基于 32 位 Windows 平臺(tái)、并獨(dú)立于語言的腳本運(yùn)行環(huán)境,并將其命名為“Windows Scripting Host”。WSH 架構(gòu)于 ActiveX 之上,通過充當(dāng) ActiveX 的腳本引擎控制器,WSH 為 Windows 用戶充分利用威力強(qiáng)大的腳本指令語言掃清了障礙。
再具體一點(diǎn)描述:你自己編寫了一個(gè)腳本文件,如后綴為 .vbs 或 .js 的文件,然后在 Windows 下雙擊并執(zhí)行它,這時(shí),系統(tǒng)就會(huì)自動(dòng)調(diào)用一個(gè)適當(dāng)?shù)某绦騺韺?duì)它進(jìn)行解釋并執(zhí)行,而這個(gè)程序,就是 Windows Scripting Host,程序執(zhí)行文件名為 Wscript.exe (若是在命令行下,則為 Cscript.exe)。
WSH 誕生后,在 Windows 系列產(chǎn)品中很快得到了推廣。除 Windows 98 外,微軟在 Internet Information Server 4.0、Windows Me、Windows 2000 Server,以及 Windows 2000 Professional 等產(chǎn)品中都嵌入了 WSH?,F(xiàn)在,早期的 Windows 95 也可單獨(dú)安裝相應(yīng)版本的 WSH。(附:各種版本 WSH 的安裝程序可以從 http://msdn.microsoft.com/scripting 站點(diǎn)下載)。
WSH 的設(shè)計(jì),在很大程度上考慮到了“非交互性腳本(noninteractive scripting)”的需要。在這一指導(dǎo)思想下產(chǎn)生的 WSH,給腳本帶來非常強(qiáng)大的功能,例如:我們可以利用它完成映射網(wǎng)絡(luò)驅(qū)動(dòng)器、檢索及修改環(huán)境變量、處理注冊(cè)表項(xiàng)等工作;管理員還可以使用 WSH 的支持功能來創(chuàng)建簡單的登陸腳本,甚至可以編寫腳本來管理活動(dòng)目錄。
而事實(shí)上,上述功能的實(shí)現(xiàn),均與 WSH 內(nèi)置的多個(gè)對(duì)象密切相關(guān),這些內(nèi)置對(duì)象肩負(fù)著直接處理腳本指令的重任。因此,我們也可以通過了解 WSH 的內(nèi)置對(duì)象來探尋 WSH 可以實(shí)現(xiàn)的功能。
圖 1 是 WSH 的內(nèi)置對(duì)象構(gòu)成情況。
從圖中我們可以看出,WSH 共有 14 個(gè)內(nèi)置對(duì)象,它們各自有著明確分工。具體而言,位于最底部的 Wscript ,主要作用是提取命令行變量,確定腳本文件名,確定 WSH 執(zhí)行文件名(wscript.exe 還是 cscript.exe),確認(rèn) host 版本信息,創(chuàng)建、關(guān)連及分離 COM 對(duì)象,寫入事件,按程序結(jié)束一個(gè)腳本文件的運(yùn)行,向默認(rèn)的輸出設(shè)備(如對(duì)話框、命令行)輸出信息等;WshArguments 的作用是獲取全部的命令行變量; WshNamed 負(fù)責(zé)獲取指定的命令行參數(shù)集;WshUnnamed 負(fù)責(zé)獲取未經(jīng)指定的命令行參數(shù)集;WshNetwork 的主要作用是開放或關(guān)閉網(wǎng)絡(luò)共享,連接或斷開網(wǎng)絡(luò)打印機(jī),映射或取消網(wǎng)絡(luò)中的共享,獲取當(dāng)前登陸用戶的信息;WshController 可以創(chuàng)建一個(gè)遠(yuǎn)程腳本對(duì)象;WshRemote 可以實(shí)現(xiàn)網(wǎng)絡(luò)中對(duì)計(jì)算機(jī)系統(tǒng)的遠(yuǎn)程管理,也可按計(jì)劃對(duì)其它程序/腳本進(jìn)行處理;WshRemote Error 的作用在于:當(dāng)一個(gè)遠(yuǎn)程腳本(WshRemote 對(duì)象)因腳本錯(cuò)誤而終止時(shí),獲取可用的錯(cuò)誤信息;WshShell 主要負(fù)責(zé)程序的本地運(yùn)行,處理注冊(cè)表項(xiàng)、創(chuàng)建快捷方式、獲取系統(tǒng)文件夾信息,處理環(huán)境變量;WshShortcut 主要用于按計(jì)劃創(chuàng)建快捷方式;WshSpecialfolders 用于獲取任意一個(gè) Windows 特殊文件夾的信息;WshURLShortcut 用于按程序要求創(chuàng)建進(jìn)入互聯(lián)網(wǎng)資源的快捷方式;WshEnvironment 用于獲取任意的環(huán)境變量(如 WINDIR, PATH, 或 PROMPT);WshScriptExec 用于確定一個(gè)腳本文件的運(yùn)行狀態(tài)及錯(cuò)誤信息。
在這些內(nèi)置對(duì)象的幫助下,我們就可以利用 WSH 充分發(fā)揮 VBScript 及 JScript 等腳本的強(qiáng)大威力,極大地提高我們的工作效率。
編輯本段WSH 是怎樣工作的
WSH的工作流程,實(shí)際上就是腳本文件被解析并執(zhí)行的過程。我們知道,現(xiàn)在腳本經(jīng)常會(huì)被植入網(wǎng)頁,其中包括 HTML 頁面(客戶機(jī)端)和 ASP 頁面(服務(wù)器端)。對(duì)于植入 HTML 頁面的腳本,其所需的解析引擎會(huì)由 IE 這樣的網(wǎng)頁瀏覽器載入;對(duì)于植入 ASP 頁面的腳本,其所需的解析引擎會(huì)由 IIS(Internet Information Services)提供。
而對(duì)于出現(xiàn)在 HTML 和 ASP 頁面之外的腳本(它們常以獨(dú)立的文件形式存在),就需要經(jīng)由 WSH 來處理了。在這里要插一句“廢話”:WSH 的正常工作的前提,是你必須安裝了微軟 3.0 或更高版本的 IE,因?yàn)?WSH 在工作時(shí)會(huì)調(diào)用 IE 中的 VBScript 和 JScript 解析引擎。
現(xiàn)在,就讓我們來看看腳本文件經(jīng)由 WSH 執(zhí)行的過程。為了更加直觀,筆者根據(jù)有關(guān)資料繪制了一幅工作流程圖(圖2),從圖中大家能對(duì) WSH 在腳本文件運(yùn)行中所起到的作用有個(gè)理性認(rèn)識(shí)。對(duì)于這個(gè)流程圖,還需要補(bǔ)充兩點(diǎn):1、圖中第(2、3)步,WSH 根據(jù)腳本文件后綴名,到系統(tǒng)注冊(cè)表中查詢所需的腳本引擎時(shí),VBScript 和 JScript 兩種語言的解析引擎是 Windows 系統(tǒng)中原有的,而其它腳本語言的解析引擎,如 PERL、TCL等,需要用戶另行定義;2、第(5)步執(zhí)行腳本命令時(shí),一些腳本指令會(huì)使用到 WSH 內(nèi)置對(duì)象所提供的服務(wù)(參見本文第二部分),例如處理注冊(cè)表項(xiàng)。這時(shí),腳本指令就會(huì)向 WSH 提出請(qǐng)求,并由 WSH 完成所需任務(wù)。也正是在這一步,WSH 的功用得到了淋漓盡致的發(fā)揮。
談到這個(gè)問題,就不太好講了。正如前面所述,WSH 實(shí)際上是一個(gè)腳本語言的運(yùn)行環(huán)境,它之所以具備強(qiáng)大的功能,是在于充分挖掘了腳本語言的潛力。因此,如果拋開腳本語言而空談 WSH ,那實(shí)際上就沒有了意義。而如果再展開來講述腳本語言,顯然就離開了今天的主題。
在這種情況下,只好采取一種折衷的方法:給大家推薦幾個(gè)腳本文件利用 WSH 執(zhí)行任務(wù)的實(shí)例,希望大家能通過這些例子對(duì) WSH 的使用有一個(gè)初步的了解。
腳本文件的編寫十分方便,你可以選用任意一個(gè)文字編輯軟件進(jìn)行編寫,寫完后,你只需將它保存為 WSH 所支持的文件名就行了(如 ..js 文件、.vbs 文件)。最常用的編輯器當(dāng)然就是我們的記事本(Notepad)了,下面的實(shí)例都是以它作為工具編寫的。
準(zhǔn)備好了嗎?讓我們先來看一個(gè)最簡單的例子吧。打開記事本,在上面寫下:
WScript.Echo("走近 WSH")
好了,將它保存為以 ..vbs 或 .js 為后綴名(可千萬不要弄成了 ..txt)的文件并退出記事本。雙擊執(zhí)行這個(gè)文件,看看結(jié)果吧,是不是很有意思?
有了第一印象后,我們繼續(xù)往下看。
這一次,我們要利用 WSH 完成一次創(chuàng)建十個(gè)文件夾的工作。代碼如下:
dim objdir
set objdir=wscript.createobject("scripting.filesystemobject")
for k=1 to 10
anewfolder="c:\chapter" & k
objdir.createfolder(anewfolder)
next
同樣,將它存為 .vbs 文件并退出。運(yùn)行后,我們會(huì)發(fā)現(xiàn),C 盤根目錄下一次性多出了十個(gè)新文件夾。
最后,再舉一個(gè)在服務(wù)器上的運(yùn)用。下面的代碼將幫助你重新啟動(dòng)指定的 IIS 服務(wù):
' 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: 盤根目錄。并通過如下命令執(zhí)行:CSCRIPT C:\STARTSVC.VBS 。運(yùn)行后,經(jīng)你指定的 IIS 服務(wù)項(xiàng)將被重新開啟。
已經(jīng)舉了三個(gè)例子,其實(shí),在 Windows 的 samples 目錄下,有個(gè) WSH 文件夾,那里面有不少很具代表性的 .vbs 和 .js 腳本文件。大家有空可以打開來看看,相信會(huì)受益匪淺的。
此外,利用 WSH ,我們還可以自己編寫腳本文件來提高網(wǎng)絡(luò)管理方面的效率。但由于受條件限制,本人在這方面的使用心得并不多,因此也就不好多說了^_^。不過,網(wǎng)上這方面現(xiàn)成的代碼倒是很多,大家有興趣可以去研究一下。
答案當(dāng)然是肯定的。任何事物都有兩面性,WSH 也不例外。應(yīng)該說,WSH 的優(yōu)點(diǎn)在于它使我們可以充分利用腳本來實(shí)現(xiàn)計(jì)算機(jī)工作的自動(dòng)化;但不可否認(rèn),也正是它的這一特點(diǎn),使我們的系統(tǒng)又有了新的安全隱患。許多計(jì)算機(jī)病毒制造者正在熱衷于用腳本語言來編制病毒,并利用 WSH 的支持功能,讓這些隱藏著病毒的腳本在網(wǎng)絡(luò)中廣為傳播。2000年曾名燥一時(shí)的 I Love You 便是一個(gè)典型代表。因此,大家對(duì)于來歷不明、尤其是郵件附件里的一些腳本文件還是應(yīng)該保持戒備。至于相應(yīng)的防范措施,筆者在別的文章中已有論述,在此就不再羅嗦了。
以上文字,希望能對(duì)大家認(rèn)識(shí) WSH 有所幫助。在運(yùn)用過程中,大家若有什么心得或發(fā)現(xiàn),別望了一起分享哦。
看不清圖片請(qǐng)到這里看原文http://www./20040423/ca240413.htm