走 近 WSH

 

WSH--這個在詞典中都很難找尋的名詞,對許多朋友來講也許還比較陌生。但正是WSH ,使 Windows 操作系統具備了更爲強大的功能。它讓我們在使用系統時擁有了許多的便利,但同時,也讓我們的電腦遭遇了不少的麻煩。下面,就讓我們一步步走進 WSH 的神祕世界,共同評判它的是非功過。

一、WSH 是什麼?

WSH,是“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 有什麼用?

WSH 的設計,在很大程度上考慮到了“非交互性腳本(noninteractive scripting)”的需要。在這一指導思想下產生的 WSH,給腳本帶來非常強大的功能,例如:我們可以利用它完成映射網絡驅動器、檢索及修改環境變量、處理註冊表項等工作;管理員還可以使用 WSH 的支持功能來創建簡單的登陸腳本,甚至可以編寫腳本來管理活動目錄。

而事實上,上述功能的實現,均與 WSH 內置的多個對象密切相關,這些內置對象肩負着直接處理腳本指令的重任。因此,我們也可以通過了解 WSH 的內置對象來探尋 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 是怎樣工作的?

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 的功用得到了淋漓盡致的發揮。

(圖2)

四、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 的支持功能,讓這些隱藏着病毒的腳本在網絡中廣爲傳播。去年曾名燥一時的 I Love You 便是一個典型代表。因此,大家對於來歷不明、尤其是郵件附件裏的一些腳本文件還是應該保持戒備。至於相應的防範措施,筆者在別的文章中已有論述,在此就不再羅嗦了。

以上文字,希望能對大家認識 WSH 有所幫助。在運用過程中,大家若有什麼心得或發現,別望了一起分享哦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章