本篇主要介紹 WSH 基礎知識,個人覺得很難理解,而且 Research 起來還很亂,所以決定記錄下來! WSH 是什麼: WSH 全稱是,Windows Scripting Host, 中文譯為“Windows腳本宿主”,是微軟的,一種腳本技術, 是內嵌在 Windows 系統中的,腳本語言的,工 ...
本篇主要介紹 WSH 基礎知識,個人覺得很難理解,而且 Research 起來還很亂,所以決定記錄下來!
WSH 是什麼:
WSH 全稱是,Windows Scripting Host,中文譯為“Windows腳本宿主”;是微軟的,一種腳本技術;是內嵌在 Windows 系統中的,腳本語言的,工作環境。在這個環境中,我們可以,以文字的形式,寫腳本,並執行腳本。環境中,還自帶了一些對象,同時也可以使用其他,第三方COM對象。這個環境,使我們可以充分利用腳本,來實現電腦工作的,自動化。所謂的 Host 也就是指,提供了,能讓 VBScript 執行的,一切的資源,的環境。而這所謂的,一切的資源,都包含了什麼呢?就包括瞭如下:
- Script engines (腳本語言支持,如,VBScript)
- Script execution hosts (wscript.exe 和 cscript.exe 執行文件)
- 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前後的書籍了。我從網上的舊書中淘到了一本,哈哈。親自讀過第一本,確實很好。文中部分內容,也借鑒了這本書。好吧,就寫這些吧!
參考資料:
- Windows Script Host 是什麼-ZOL問答
- Windows腳本宿主_百度百科
- WSH_百度百科
- Windows Script Host Object Model
- WScript Object | Microsoft Docs
- WshShell Object | Microsoft Docs
- Windows Script Host - Tim Hill - Google Books
- Windows Script Host - Wikipedia
- VBScript - What Is WSH?
- WshShell 對象介紹 - CSDN博客
- Wscript對象詳解 - CSDN博客
- 《Microsoft WSH and VBScript Programming for the Absolute Beginner》