如何攔截 ADSI 錯誤
VBScript 只提供一種方式來攔截錯誤:內嵌錯誤處理。 內嵌錯誤處理程式會 從 On Error Resume Next 語句開始。 由於 On Error Resume Next 會防止任何錯誤停止執行腳本,直到呼叫 On Error Resume Next 的範圍結束為止,因此您必須在發生錯誤繼續下一個語句之後的每個時間點檢查 Err 的值。 下列範例示範 ADSI 文稿中的內嵌錯誤處理:
On Error Resume Next
Set myComputer = GetObject(computerPath)
If Err Then AdsiErr()
' Create the new user account
Set newUser = myComputer.Create("user", username)
newUser.SetInfo
If Err Then AdsiErr()
Sub AdsiErr()
Dim s
Dim e
If Err.Number = &H8000500E Then
WScript.Echo "The user " & username & " already exists."
Elseif Err.Number = &H80005000 Then
WScript.Echo "Computer " & computerPath & " not found. Check the ADsPath and try again."
Else
e = Hex(Err.Number)
WScript.Echo "Unexpected Error " & e & "(" & Err.Number & ")"
End If
WScript.Quit(1)
End Sub
在腳本可能遇到錯誤的每個位置之後,會有 If Err 語句。 Err 物件包含文稿執行期間發生之最後一個錯誤的錯誤碼;如果沒有發生錯誤,Err 一律會是零 (0)。 在上述範例中,錯誤會導致執行跳至 AdsiErr 子程式,這會檢查 Err.Number 的值是否有預期的錯誤。 腳本不會因為神秘的錯誤訊息而死去,而是會為停止執行的原因提供一些更好的說明。
請記住,在呼叫 On Error Resume Next 的範圍中,將會忽略在 On Error Resume Next 呼叫之後發生的任何錯誤。 如果您忘記檢查適當位置的 Err 值,這實際上會使腳本更難偵錯。 無論您預期發生錯誤的位置,請務必檢查 Err 的值。
(當您一開始偵錯腳本時,您可能只想讓腳本停止執行,並在錯誤上顯示違規行號,然後在基本程式流程正確之後新增錯誤處理程式。