1. 程式人生 > WINDOWS開發 >Windows Scripting Host (WSH) 是什麼?

Windows Scripting Host (WSH) 是什麼?

本篇主要介紹 WSH 基礎知識,個人覺得很難理解,而且 Research 起來還很亂,所以決定記錄下來!


WSH 是什麼:

WSH 全稱是,Windows Scripting Host,中文譯為“Windows指令碼宿主”;是微軟的,一種指令碼技術;是內嵌在 Windows 系統中的,指令碼語言的,工作環境。在這個環境中,我們可以,以文字的形式,寫指令碼,並執行指令碼。環境中,還自帶了一些物件,同時也可以使用其他,第三方COM物件。這個環境,使我們可以充分利用指令碼,來實現計算機工作的,自動化。所謂的 Host 也就是指,提供了,能讓 VBScript 執行的,一切的資源,的環境。而這所謂的,一切的資源,都包含了什麼呢?就包括瞭如下:

  1. Script engines (指令碼語言支援,如,VBScript)
  2. Script execution hosts (wscript.exe 和 cscript.exe 執行檔案)
  3. The WSH core object model (WSH 物件模型,就是自帶了一些物件給你用)

而,這三個 Component 之間的關係,就如圖下:

技術分享圖片

WSH 的用途:

這是我摘抄下來的兩句話,基本概括了 WSH 的用途:

  • WSH is an automation technology for Microsoft Windows operating systems.
  • WSH is a Windows administration tool.

第一句是說,WSH 是一種自動化技術;第二句是說,WSH 是一種 Admin 工具;合起來就是,WSH 主要用於自動化,通常用於 Admin 任務。

WSH 的歷史由來:

早年間的系統,裡面都有一個 Command Shell,人們可以往裡輸入,文字命令,然後,系統再回給你一堆文字。這些文字命令,既能控制系統的方方面面,也能控制電腦的執行。很快的,設計系統的人意識到,很多日常電腦操作的命令,都是不斷重複的文字。於是之後的系統,就增加的新功能,就是,可以把命令存在一個檔案中,然後,系統可以隨時讀取並執行,這個檔案中儲存的命令。然後,這個“命令的清單”,就被稱為了,我們都知道的,batch files(批處檔案),也叫做,shell scripts,batch jobs。隨後的幾年,batch file 得到了很多加強,如,支援 Parameterization (引數化),就是支援程式執行時,提供 Arguments。然後,又增加了 Control Flow 的支援,就是 if 和 loop 什麼的。後來,漸漸的,batch files,發展為了,一門簡單的 Macro 語言。但是,batch files 語言,也有一系列的缺點和不足;如,syntax 很麻煩,並且,和其他 Windows 程式的互動,非常的侷限。正是這些缺點的不足,讓微軟決定開發一套,不同於傳統的 Commend-Line 概念的,而是,基於,現代的 Object-Oriented 概念的,指令碼技術。這套新技術,被統稱為,System Scripting,也就是,系統指令碼。然後從 Windows98 起,微軟就推出了 WSH 和 VBScript,用於取代原來的,Batch Script 技術。WSH 提供了一個,乾淨整潔的,指令碼環境,和一套完整的,物件模型。讓我們可以呼叫其他程式,和訪問系統功能,VBScript 則提供了一套,邏輯清晰,結構工整的,指令碼語言。這也就是,WSH 和 VBScript,的歷史由來。

WSH 物件模型:

英文全稱為,Windows Script Host Object Model;個人理解,物件模型,就是物件(Object)的組織結構(圖)。其實,整個 Windows 作業系統,都可以理解為,一大堆物件(Objects)的集合。通常,每個程式設計環境,都會提供自己的物件模型,然後,開發人員可以使用這些物件模型,解決各種問題。而,WSH 物件模型,就是 WSH 工作環境裡,自帶的一套,核心物件的,模型。一共自帶了14個物件,各有各的作用,詳見下面的說明:

關於 Wscript 物件:

其中,Wscript Object,是 WSH 物件模型,中的 Root Object (根物件),It is from this object that all other objects are instantiated。Wscript Object,每次開機時候,就自動被 established,所以,寫程式碼的時候,可以拿來就用,不用再被 instantiated。例如,你可以直接使用 Wscript 的 Method,Wscript.Sleep()。但是,其他任何Object,你要像使用它的 Method,你都需要像用 Wscript.CreateObject(),去 Establishes an instance of the specified object,然後,才能用這個新的 instance 去呼叫,它旗下的 method 和 attribute。下面是,WSH 物件模型的圖,再下面的表格是,上面提到的14個核心物件的作用。

技術分享圖片

No. Name Description
1 Wscript 主要作用是提取命令列變數,確定指令碼檔名,確定 WSH 執行檔名 (wscript.exe 還是 cscript.exe),
確認 Host 版本資訊,建立,關連及分離 COM 物件,寫入事件,
按程式結束一個指令碼檔案的執行,向預設的輸出裝置(如對話方塊,命令列)輸出資訊等.
2 WshArguments 主要作用是獲取全部的命令列變數.
3 WshNamed 負責獲取指定的命令列引數集.
4 WshUnnamed 負責獲取未經指定的命令列引數集.
5 WshNetwork 主要作用是開放或關閉網路共享,連線或斷開網路印表機,對映或取消網路中的共享,獲取當前登陸使用者的資訊.
6 WshController 建立一個遠端指令碼物件.
7 WshRemote 實現網路中對計算機系統的遠端管理,也可按計劃對其它程式或指令碼進行處理.
8 WshRemote Error 作用是當一個遠端指令碼(WshRemote 物件)因指令碼錯誤而終止時,獲取可用的錯誤資訊.
9 WshShell 主要負責程式的本地執行,處理登錄檔項,建立快捷方式,獲取系統資料夾資訊,處理環境變數等.
10 WshShortcut 主要用於按計劃建立快捷方式.
11 WshSpecialFolders 用於獲取任意一個 Windows 特殊資料夾的資訊.
12 WshURLShortcut 用於按程式要求建立進入網際網路資源的快捷方式.
13 WshEnvironment 用於獲取任意的環境變數(如 WINDIR,PATH,或 PROMPT).
14 WshScriptExec 用於確定一個指令碼檔案的執行狀態及錯誤資訊.


篇尾總結:

如果想更多的瞭解,VBScript 或者 Batch Script,強烈推薦下面兩本書:

  • 《Windows Script Host》Tim Hill
  • 《Windows NT Shell Scripting》Tim Hill

可惜好像沒有中文版,而且都是1999前後的書籍了。我從網上的舊書中淘到了一本,哈哈。親自讀過第一本,確實很好。文中部分內容,也借鑑了這本書。好吧,就寫這些吧!


參考資料:

  1. Windows Script Host 是什麼-ZOL問答
  2. Windows指令碼宿主_百度百科
  3. WSH_百度百科
  4. Windows Script Host Object Model
  5. WScript Object | Microsoft Docs
  6. WshShell Object | Microsoft Docs
  7. Windows Script Host - Tim Hill - Google Books
  8. Windows Script Host - Wikipedia
  9. VBScript - What Is WSH?
  10. WshShell 物件介紹 - CSDN部落格
  11. Wscript物件詳解 - CSDN部落格
  12. 《Microsoft WSH and VBScript Programming for the Absolute Beginner》