如何捕获 ADSI 错误

VBScript 仅提供一种捕获错误的方法:内联错误处理。 内联错误处理程序以 On Error Resume Next 语句开始。 由于 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 的值。

(在最初调试脚本时,可能只需让脚本停止执行,并在出错时显示出错行号,然后在基本程序流程正确后再添加错误处理程序。)