複製鏈接
請複製以下鏈接發送給好友

WSH

鎖定
WSH 是“Windows Scripting Host”的縮略形式,其通用的中文譯名為“Windows腳本宿主”。對於這個較為抽象的名詞,我們可以先作這樣一個籠統的理解:它是內嵌於 Windows 操作系統中的腳本語言工作環境。
中文名
WSH
全    稱
Windows Scripting Host
中文譯名
Windows腳本宿主
概念出現
Windows 98 操作系統

WSH簡介

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)。 [1] 

WSH推廣

WSH 誕生後,在 Windows 系列產品中很快得到了推廣。除 Windows 98 外,微軟在 Internet Information Server 4.0、Windows Me、Windows 2000 Server,以及 Windows 2000 Professional 等產品中都嵌入了 WSH。早期的 Windows 95 也可單獨安裝相應版本的 WSH。

WSH作用

WSH 的設計,在很大程度上考慮到了“非交互性腳本(noninteractive scripting)”的需要。在這一指導思想下產生的 WSH,給腳本帶來非常強大的功能,例如:我們可以利用它完成映射網絡驅動器、檢索及修改環境變量、處理註冊表項等工作;管理員還可以使用 WSH 的支持功能來創建簡單的登陸腳本,甚至可以編寫腳本來管理活動目錄
而事實上,上述功能的實現,均與 WSH 內置的多個對象密切相關,這些內置對象肩負着直接處理腳本指令的重任。因此,我們也可以通過了解 WSH 的內置對象來探尋 WSH 可以實現的功能。
圖 1 是 WSH 的內置對象構成情況。
圖1 WSH 的內置對象構成 圖1 WSH 的內置對象構成
從圖1中我們可以看出,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工作原理

圖 2 WSH的工作流程 圖 2 WSH的工作流程 [1]
WSH的工作流程,實際上就是腳本文件被解析並執行的過程。我們知道,腳本經常會被植入網頁,其中包括 HTML 頁面(客户機端)和 ASP 頁面(服務器端)。對於植入 HTML 頁面的腳本,其所需的解析引擎會由 IE 這樣的網頁瀏覽器載入;對於植入 ASP 頁面的腳本,其所需的解析引擎會由 IIS(Internet Information Services)提供。
而對於出現在 HTML 和 ASP 頁面之外的腳本(它們常以獨立的文件形式存在),就需要經由 WSH 來處理了。在這裏要插一句“廢話”:WSH 的正常工作的前提,是你必須安裝了微軟3.0 或更高版本的 IE,因為 WSH 在工作時會調用 IE 中的 VBScript 和 JScript 解析引擎。
讓我們來看看腳本文件經由 WSH 執行的過程。為了更加直觀,筆者根據有關資料繪製了一幅工作流程圖(圖2),從圖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 的優點在於它使我們可以充分利用腳本來實現計算機工作的自動化;但不可否認,也正是它的這一特點,使我們的系統又有了新的安全隱患。許多計算機病毒製造者正在熱衷於用腳本語言來編制病毒,並利用 WSH 的支持功能,讓這些隱藏着病毒的腳本在網絡中廣為傳播。2000年曾名燥一時的 I Love You 便是一個典型代表。因此,大家對於來歷不明、尤其是郵件附件裏的一些腳本文件還是應該保持戒備。至於相應的防範措施,筆者在別的文章中已有論述,在此就不再囉嗦了。
以上文字,希望能對大家認識 WSH 有所幫助。在運用過程中,大家若有什麼心得或發現,別忘了一起分享。 [1] 
參考資料
  • 1.    走近 WSH  .天極網軟件頻道.2001-07-16[引用日期2013-04-21]