VBScript
VBScript("Microsoft Visual Basic Scripting Edition")是微軟以 Visual Basic 為藍本開發的一種已廢棄的動態指令碼語言。它允許 Microsoft Windows 系統管理員生成用於管理電腦的強大工具,無需錯誤處理,並具有子程式和其他進階編程結構。它可以讓使用者完全控制計算環境的許多方面。
實作者 | 微軟 |
---|---|
面市時間 | 1996年 |
目前版本 |
|
作業系統 | Windows |
副檔名 | .vbs, .vbe, .wsf, .wsc (.hta, .htm, .html, .asp) |
網站 | docs |
主要實作產品 | |
Windows Script Host, Active Server Pages | |
啟發語言 | |
Visual Basic | |
影響語言 | |
Windows PowerShell |
使用範圍
由於VBScript可以通過Windows指令碼宿主呼叫COM,因而可以使用Windows作業系統中可以被使用的程式媒體櫃,比如它可以使用Microsoft Office的媒體櫃,尤其是使用Microsoft Access和Microsoft SQL Server的程式媒體櫃,當然它也可以使用其它程式和作業系統本身的媒體櫃。在實踐中VBScript一般被用在以下三個方面:
Windows作業系統
VBScript可以被用來自動地完成重複性的Windows作業系統任務。在Windows作業系統中,VBScript可以在Windows Script Host的範圍內執行。Windows作業系統可以自動辨認和執行*.VBS和*.WSF兩種檔案格式,此外Internet Explorer可以執行HTA和CHM檔案格式。VBS和WSF檔案完全是文字式的,它們只能通過少數幾種對話視窗與使用者通訊。HTA和CHM檔案使用HTML格式,它們的程式碼可以像HTML一樣被編輯和檢查。在WSF、HTA和CHM檔案中VBScript和JavaScript的程式碼可以任意混合。HTA檔案實際上是加有VBS、JavaScript成分的HTML檔案。CHM檔案是一種線上說明,使用者可以使用專門的編輯程式將HTML程式編輯為CHM。
Windows 作業系統也提供一些 VBScript 指令碼來進行進階管理功能,例如管理 Windows 啟用金鑰的 slmgr.vbs(Windows Server License Manager Script)。
網頁瀏覽器(客戶端的VBS)
網頁中的VBS可以用來控制客戶端的網頁瀏覽器(以瀏覽器執行VBS程式)。VBS與JavaScript在這一方面是競爭者,它們可以用來實現動態HTML,甚至可以將整個程式結合到網頁中來。
至今為止VBS在客戶方面未能占優勢,因為它只獲得Microsoft Internet Explorer的支援(Mozilla Suite可以透過安裝一個套件來支援VBS),並且IE11起已不再支援VBScript[1]。而JavaScript則受到所有網頁瀏覽器的支援。在Internet Explorer中VBS和JavaScript使用同樣的權限,它們只能有限地使用Windows作業系統中的對象。
網頁伺服器(伺服器方面的VBS)
在網頁伺服器方面VBS是微軟的Active Server Pages的一部份,它與JavaServer Pages和PHP是競爭對手。在這裡VBS的程式碼直接嵌入到HTML頁內,這樣的網頁以ASP結尾。網頁伺服器Internet資訊服務執行ASP頁內的程式部份並將其結果轉化為HTML傳遞給網頁瀏覽器供使用者使用。這樣伺服器可以進行資料庫聞訊並將其結果放到HTML網頁中。
示範
Hello World
最簡單的例子:
MsgBox "Hello World"
以.vbs
檔案儲存。再使用cscript.exe
或wscript.exe
執行。
一個更複雜的例子中,示出了使用MsgBox
作為函式(返回一個結果),並使用了三個參數,其中第二個參數使用的是常數。
Dim x
' These three produce the same result. However, the use of constants as in the third line
' is considered best practice.
x = MsgBox("Hello World:Text",1+64+4096,"Hello World:Title")
x = MsgBox("Hello World:Text",4161,"Hello World:Title")
x = MsgBox("Hello World:Text", vbOKCancel+vbInformation+vbSystemModal, _
"Hello World:Title")
' Presents the number corresponding to the button pressed. Different constants will produce
' different behaviours. For example, vbOKCancel specifies two buttons in the dialogue box,
' whereas vbYesNoCancel specifies three.
x = MsgBox("Hello World:Text", vbYesNoCancel+vbInformation,"Hello World:Title")
MsgBox "The result is " & x
終止任務
VBScript能訪問Windows管理規範 (WMI),就像Windows工作管理員。以下的程式碼執行時將會終止(「殺掉」)任何關於notepad.exe的處理程序。
'Terminate all processes involving the name <strProcessToKill>
Option Explicit
Dim strComputer, strProcessToKill, objWMIService, colProcess, objProcess
strComputer = "."
strProcessToKill = "notepad.exe"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer _
& "\root\cimv2")
Set colProcess = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = '" & strProcessToKill & "'")
For Each objProcess in colProcess
MsgBox "... terminating " & objProcess.Name
objProcess.Terminate()
Next
使用Option Explicit並不是必須的,但它被認為是VBScript的最佳實踐。[2][3]
建立具有唯一的名稱的十個檔案
這個實例顯示如何建立檔案並向它添加內容。它還演示了字串連接。
For i = 1 to 10
createFile( i )
Next
Public sub createFile(a)
Dim fso,myFile
filePath = "C:\file_name" & a & ".txt"
Set fso=CreateObject("Scripting.FileSystemObject")
Set MyFile= fso.CreateTextFile( filePath)
MyFile.WriteLine("This is a separate file")
MyFile.close
End Sub
傳送按鍵
SendKeys方法類比一個或多個按鍵到活動視窗(類比在鍵盤上輸入)。 在該範例中,指令碼傳送字串「Hello World!」3次,每次暫停2秒(2000毫秒)。SendKeys巨集可能會在某些程式中失效,因為一些軟體(如在安裝時輸入許可證金鑰)將檢查是否是真正的按鍵,而不是虛擬的。
set shl = createobject("wscript.shell")
shl.sendkeys "Hello World!"
wscript.sleep 2000
shl.sendkeys "Hello World!"
wscript.sleep 2000
shl.sendkeys "Hello World!"
wscript.sleep 2000
執行期間,「Hello World!」將顯示在命令提示字元。
Windows檔案操作
對象FileSystemObject執行一些檔案操作(例如測試一個檔案是否存在),並且還建立一個文字檔案(一個TextStream對象)。
myfilename = "C:\Wikipedia - VBScript - Example - Hello World.txt"
MakeHelloWorldFile myfilename
Sub MakeHelloWorldFile (FileName)
'Create a new file in C: drive or overwrite existing file
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(FileName) Then
Answer = MsgBox ("File " & FileName & " exists ... OK to overwrite?", vbOKCancel)
'If button selected is not OK, then quit now
'vbOK is a language constant
If Answer <> vbOK Then Exit Sub
Else
'Confirm OK to create
Answer = MsgBox ("File " & FileName & " ... OK to create?", vbOKCancel)
If Answer <> vbOK Then Exit Sub
End If
'Create new file (or replace an existing file)
Set FileObject = FSO.CreateTextFile (FileName)
FileObject.WriteLine "Time ... " & Now()
FileObject.WriteLine "Hello World"
FileObject.Close()
MsgBox "File " & FileName & " ... updated."
End Sub
MakeHelloWorldFile
將會在按下按鈕後於C:\ 驅動器根目錄建立(若已經存在則更新)一個小文字檔案。
Excel對象操作
Option Explicit '所有变量必须显式声明
Dim app,workbook,sheet
Dim row,col
Set app = WScript.CreateObject("Excel.Application")
app.Visible = True
Set workbook = app.WorkBooks.Add
Set sheet = workbook.Worksheets(1)
'10x10 random value
For row = 1 To 10
For col = 1 To 10
sheet.Cells(row,col).Value = CInt(Int((100 * Rnd()) + 1))
Next
Next
Set sheet = workbook.Worksheets(2)
'10x10 random value
sheet.Range("A1:J10").Formula = "=Int(Rand() * 100 + 1)"
語言
VBScript主要的優點有:
- 由於VBScript由作業系統,而不是由網頁瀏覽器解釋,它的檔案比較小。
- 易學。
- 在所有2000 / 98SE以後的Windows版本都可直接使用。
- 可以使用其它程式和可使用的物件(尤其是Microsoft Office)。
缺點有:
- 現在VBS無法作為電子郵件的附件了。Microsoft Outlook拒絕接受VBS為附件,收信人無法直接使用VBS附件。
- VBS的各種編輯器不受歡迎。
- 作業系統沒有任何特別的保護設施。VBS程式與其它JS、EXE、BAT或CMD程式一樣對待。作業系統沒有監察惡意功能的能力。
和VB的對比
不能為變數定義類型
在VB中,為變數定義類型使用「Dim 變數名 As 類型」的語句格式。
但是在VBScript中這樣寫是錯誤的,VBScript中的變數都是弱型別(即Variant變體),因此它不需要指定類型。只能使用「Dim 變數名」的格式,直譯器會自動根據賦值的類型定義變數類型。
不能使用條件編譯
在VB中,可以使用#If…Then、#ElseIf…Then、#Else、#End If、#Const… = …等語句定義編譯時使用的語句
而由於VBScript不需要編譯即可被WSH(Windows Script Host)直接解釋執行,所以並不需要條件編譯語句。
安全性
微軟決定Outlook和Outlook Express中的HTML郵件可以使用VBScript後出現了許多利用Windows Script Host和ActiveX的功能的電腦病毒。這些病毒之所以能夠傳播開來也是因為一開始這些系統功能完全未受保護。雖然VBScript和JavaScript使用同樣的使用作業系統的功能的安全措施,今天這些功能被看作不符合標準。
一般很難保護VBScript的程式碼不被使用者看到。
參考資料
- ^ (英文)VBScript is no longer supported in IE11 edge mode for the Internet zone. [2014-05-25]. (原始內容存檔於2015-04-07).
- ^ Remarks on Option Explicit Statement (頁面存檔備份,存於網際網路檔案館), MSDN Library
- ^ Why force yourself to declare all variables?, In VBScript For Dummies, John Walkenbach, IDG Books Worldwide, Inc., 1996