如何捕获 ADSI 错误

VBScript 仅提供一种方法来捕获错误:内联错误处理。 内联错误处理程序以 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 (0) 。 在前面的示例中,错误将导致执行跳转到 AdsiErr 子例程,该子例程检查 Err.Number 的值是否存在预期错误。 脚本不会因神秘的错误消息而死亡,而是为停止运行的原因提供了一些更好的解释。

请记住,在调用 On Error Resume Next 的作用域内,将忽略在 “错误恢复下一步 ”调用之后发生的任何错误。 如果忘记在适当位置检查 Err 的值,这实际上会使脚本更难调试。 无论预期出现错误的位置,请务必检查 Err 的值。

(在最初调试脚本时,你可能只想让脚本停止执行,并在错误上显示有问题的行号,然后在基本程序流正确后添加错误处理程序。)