VBScript

VBScript（"Microsoft Visual Basic Scripting Edition"）是微軟以 Visual Basic 為藍本開發的一種已廢棄的Active Scripting語言。它允許 Microsoft Windows 系統管理員生成用於管理計算機的強大工具，無需錯誤處理，並具有子程序和其他高級編程結構。它可以讓用戶完全控制計算環境的許多方面。2023年，微軟發布VBScript棄用(deprecated)。2024年5月，發布階段移除計畫，2027年移除。

**使用範圍**
由於VBScript可以通過Windows Script Host調用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文件是一種Online help，用戶可以使用專門的編輯程序將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。而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 
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的最佳實踐。

**創建具有唯一的名稱的十個文件**
這個實例顯示如何創建文件並向它添加內容。它還演示了字符串連接。
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 User's Guide date=20220418071511 - VBScript Language Reference date=20220418071507