大話windows script host編程

來源:互聯網
上載者:User

轉自:http://dev.yesky.com/117/2482617.shtml

大話Windows Script Host編程2006-07-12 08:00作者:鄭建標出處:天極開發責任編輯:方舟

   1.引言

  WSH的全稱是Windows Script Host,是一種支援ActiveX(COM)的獨立指令碼語言。WSH指令碼程式本來是為了替代DOS時代的批次檔而產生的,後來由於WSH的應用很廣泛,已經不只是局限於批處理的替代品了。從Windows98開始,作業系統就已經內建了WSH,因此在Windows98或以上的作業系統中,可以不安裝任何軟體就能直接使用WSH。Microsoft的首頁上有最新版的WSH供下載,目前的版本是5.6,有用於Windows9X與Windows2000/XP的兩種版本,每種版本的安裝檔案均不超過1M。

  2.WSH指令檔的基本概念

  2.1 WSH指令檔類型

  WSH可以使用VBscript與Jscript,即使用的指令碼語言與網頁指令碼是一樣的。WSH檔案的副檔名為vbs及js,分別用VBscript與Jscript作為編程指令碼語言。還有一種指令檔的副檔名是wsf,它是一種包含XML的檔案,wsf檔案中可以同時包含VBscript與Jscript兩種語言。wsf檔案中,可以使用多種指令碼,需要一些XML標籤來聲明的,最基本的就是用<script>標籤說明指令碼的類型,另外最外層要用<job>標籤聲明任務。下面就是一個最簡單的wsf指令碼的架構例子:

<package><job>
<script language="VBscript">
wscript.Echo "這是VBscript" 'vb指令碼
</script>
<script language="jscript">
wscript.Echo("這是jscript") ;//java指令碼
</script>
</job></package>

  而vbs與js檔案就不用任何額外的內容,直接寫VBscript及Jscript語句即可。

  2.2 WSH指令檔的運行:

  上面所講的3種wsh檔案都可以直接在Windows中雙擊運行,他們關聯的執行檔案是wscript.exe檔案。另外執行指令碼的程式還有一個,它是cscript.exe,是一個可以在DOS下啟動並執行程式。當然DOS下啟動並執行程式與Windows的大部分功能是相同的,只是稍微有點不同,如同樣是Wscript.Echo輸出語句,wscript.exe的結果是以視窗方式顯示,而cscript.exe是以標準控制台方式輸出,並可以進行DOS改向。

  另外運行WSH指令碼時也支援檔案的拖放操作。具體的操作步驟是:選中若干個檔案,把它們拖到包含下面指令碼的檔案,那麼下面vbs指令碼就會執行,並擷取拖過來的檔案名稱,把它們顯示出來:

Set objargs=Wscript.Arguments
For i=0 to objargs.count-1
Wscript.Echo objargs(i)
Next

  2.3 WSH的主要對象

  WSH的指令碼不支援API功能,WSH除了提供若干指令碼語言外,還提供了一些編程可以使用的對象,利用這些對象,可以方便地進行一些指令碼語言本身不具備的功能,如系統、網路等操作。

  2.3.1 Wscript對象

  Wscript對象是WSH本身具有的對象,在指令碼中不需要建立,可以直接使用。它的最常用的一個方法CreateObject,用於建立一個COM對象,可以調用其他COM程式。WSH的Echo方法、Quit方法、Sleep方法,以及Path屬性、ScriptFullName屬性都可以在指令碼中使用,為指令碼的編寫提供方便。

  2.3.2 WshShell對象

  WshShell對象是WSH提供的最有用的一個對象,有許多系統功能平時只能用API方式才能實現,用WshShell的方法即可簡單地實現。它可用Wscript.Createobject(“wscript.shell”)方法建立。其常用方法與屬性有:CreateShortcut方法用於建立一個捷徑或URL捷徑; Run方法用於執行程式,功能比VB的Shell命令功能要強,可以直接開啟關聯檔案、檔案夾、網頁等;RegDelete/RegRead/RegWrite方法是對登錄機碼的刪除、讀取與寫入,是非常有用的;SendKeys方法將指定的按鍵序列送至使用中視窗;SpecialFolders屬性返回特殊的檔案夾名,如案頭、我的文件等。

  2.3.3 WshNetwork對象

  WshNetwork對象主要涉及網路及印表機方面的功能,其主要方法與屬性有:建立或刪除網路印表機的串連,映射及刪除網路磁碟機,枚舉網路磁碟機及網路印表機等方法。

  2.3.4 WshShortcut/ WshUrlShortcut對象:

  WshShortcut/WshUrlShortcut對象並不能由Createobject方法來產生,而是由WshShell的CreateShortcut方法建立。先設定捷徑的相關屬性,再用Save方法建立即可。

  2.3.5 FSO對象:

  FSO是File System Object的縮寫,它提供磁碟、檔案夾及檔案的有關操作,是由WScript.CreateObject("Scripting.FileSystemObject")產生。FSO對象對於使用過動態網頁製作的人是不陌生的,背景程式對於檔案操作基本上都是用FSO來實現的。由於VBscript指令碼語言是VB語言的一個簡易版,去掉了VB的一些功能,其中所有的檔案功能都去掉了,所以指令碼中只能用COM的方法調用FSO對象來解決檔案夾及檔案的一些操作。從嚴格意義上來講,FSO對象不是WSH所帶的,而是VBscript所帶的,但由於WSH本身帶了VBscript,而且FSO在WSH的作用 非常大,所以說WSH帶了FSO也未嘗不可。但由於介紹FSO的文章很多了,所以這裡就不再對它進行細述了。

  2.3.6 調用其它對象:

  WSH是可以調用其它的COM對象的,所以只要機器上已經安裝的軟體,並提供COM伺服器方式的,都可以在WSH中調用。包括ODBC資料庫操作對象、各種EXE方式的對象等,如可以直接操作Word的“Word.Application”對象。即WSH能使用的對象就是無窮的了。

  2.4 WSH檔案的編輯

  由於WSH檔案是一個純文字檔案,從理論上講,可以用任何的文字編輯器均可進行編輯。但由於現在一些網頁製作軟體都為一些指令碼程式提供屬性及方法的智能提示功能,所以選擇一些這樣的工具會方便許多的。其中微軟的Visual InterDev是不錯的選擇,畢竟它與WSH都是微軟的產品,互相配合比較好。當然若輸入是按網頁的方式進行,最後可能要去掉一些HTML標籤。
2.5 指令碼樣本

  下面是一個軟體安裝的指令碼例子,它完成檔案複製、在案頭建立捷徑、修改註冊表設定自動啟動的功能。程式中有詳細的注釋,有VB基礎的都能夠看明白的。完成某軟體的安裝,只需要把下面的程式儲存成一個VBS檔案,與要安裝的檔案放在同一目錄下,在需要安裝的機器上直接雙擊就可以安裝了。

'建立兩個對象:
Set owsh = wscript.CreateObject("WSCript.Shell")
Set ofso = wscript.CreateObject("Scripting.FileSystemObject")
'提示目標檔案夾
cdest = InputBox("要安裝的目標檔案夾:","安裝","c:/xxx")
'指令碼所在檔案夾為源檔案夾:
cSrc= ofso.GetFile(wscript.scriptfullname).ParentFolder
'複製檔案到目標檔案夾:
ofso.copyfile cSrc &"*.*", cDest
'在案頭建立捷徑:
cDesktop = owsh.specialFolders("desktop") '案頭檔案夾
Set olink = owsh.createshortcut_
(cDesktop & "/xx管理系統.lnk") '建立捷徑對象
olink.targetPath = cDest & "xx.exe" '目標檔案
olink.WindowStyle=1 '運行方式:常規視窗
olink.hotkey="CTRL+SHIFT+F" '熱鍵
olink.Workingdirectory=cDesktop '工作目錄
olink.save '產生快捷檔案
'把程式寫入註冊表的自動運行項中,讓程式開機時自動運行
cReg="HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run/"
owsh.regwrite cReg, cDest & "xx.exe" '檔案寫入自動運行登錄機碼
Msgbox "程式安裝完成"

  2.6 指令檔的加密

  由於指令檔是純文字檔案,所以任何人不用任何工具都可以直接查看代碼。與網頁檔案加密一樣,WSH指令檔也可以用微軟提供的指令碼編碼器進行加密編碼。編碼器screnc可直接免費下載安裝,它是一個命令列方式的軟體,vbs與js檔案分別編碼加密成vbe與je檔案,此類檔案也可以直接雙擊運行,編碼後的代碼雖然還是文字檔,但裡面的內容已經打亂了。編碼後的檔案還具有不可修改性,只要對它進行修改,即使只修改了1個位元組,整個指令碼就不能使用了。雖然編碼器可以打亂代碼,讓人不能閱讀其中的代碼,也不能修改,但它只能算一個簡單的工具,是防君子不防小人的,對付真正的解密高手或駭客是一點用都沒有的。

  3.WSH的應用

  3.1 替代批次檔

  WSH的原目的就是為了替代DOS時代的批處理命令而推出的。如上例中的安裝程式,就可以直接雙擊對應的檔案,運行事先編寫好的程式實現安裝功能。這種用法主要用於一些簡單的環境系統設定、臨時性編寫的小工具等具有一定邏輯功能的程式。由於功能比批處理強大得多,而編寫及運行比使用特定的程式設計語言要簡單,不需要開發環境及編譯過程,修改也很方便,因此掌握WSH的指令碼,對於程式員還是有一定的作用的。

  3.2作為COM介面提供服務

  WSH的另外的一個用途是作為COM介面程式供其他程式設計語言調用,可以提供一些此語言本身不具備的功能。一般情況下,在程式設計語言中若本身不提供的功能,要通過API來實現,但使用API畢竟比較麻煩。WSH提供的對象的功能是比較有用的,可以替代API。

  作為一個標準的COM介面程式,上述介紹的WSH的對象,除了Wscript對象外,其它的對象都是可以直接在其它程式設計語言中使用的。如在VB中就可以直接用CreateObject函數建立對象,然後用對象的方法及屬性對其進行操作。

  4.WSH的安全問題

  WSH指令碼程式很簡單,但是大部分進階語言能乾的事情,它基本上都具備,所以許多病毒也利用了這一點,利用WSH來編製病毒程式。有些病毒甚至簡單地用Email發送一個帶病毒的VBS附件,使用者一旦雙擊此附件檔案,就會傳染上病毒了。所以一段時間WSH弄得人心惶惶,許多人把WSH看作是病毒的罪魁禍首了。許多地方都介紹刪除WSH而防止病毒的方法。其實也用不著這樣害怕,雖然刪除了WSH,可以防止部分利用WSH進行傳染的病毒,但是這樣防止根本不能從根本上解決問題。如收到VBS檔案直接開啟傳染的問題,你開啟一個EXE檔案也有這問題,難道讓機器把EXE檔案也禁止了?其實只要知道VBS/JS/WSH/WSF等檔案也是可以直接啟動並執行、是有危險就是了,收到別人的這類檔案就值得懷疑了。同樣道理,WSH以組件方式為病毒幹壞事,助紂為虐的事也一樣,關閉WSH也只能解決部分問題,其它組件怎麼辦?設定IE選項中的安全層級很重要,安全層級太低了是不安全的。另外升級WSH到5.6版也可提高安全係數,有許多漏洞5.6版已經堵住了。當然若的確不用WSH,關閉它也是一種辦法,Windows2000的方法是把VBS/JS等檔案的關聯去掉,或者乾脆把Wscript.exe與Cscript.exe檔案改名或刪除。

  5.結束語

  WSH使用的是指令碼語言,雖然功能沒有正式的程式設計語言那麼強,但由於系統是內建的,要求簡單,甚至記事本就可以編寫來源程式,並可直接運行,而且使用的指令碼語言是與常用的VB及Java很相似的兩種指令碼語言,所以應用還是非常廣泛的。如一些簡單的軟體安裝,系統機器的維護,為其它軟體提供服務功能等。但它的缺點是由於部分機器為了防止病毒,把WSH刪除了,所以本來不用安裝軟體,所有機器都能使用的優勢也不一定存在了,在一些機器上想要使用,也要安裝系統了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.