Поделиться через


Как отлавливать ошибки ADSI

VBScript предлагает только один способ ловушки ошибок: встроенная обработка ошибок. Встроенный обработчик ошибок начинается с инструкции On Error Resume Next. Так как On Error Resume Next предотвратит остановку выполнения скрипта до конца области видимости, из которой вызывается On Error Resume Next, необходимо проверять значение Err в каждой точке после инструкции On Error Resume Next, где, по вашему мнению, может возникнуть ошибка. В следующем примере показана встроенная обработка ошибок в скрипте 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.

(При первоначальной отладке скрипта может потребоваться просто позволить скрипту остановить выполнение и отобразить номер строки, вызвавшей ошибку, а затем добавить обработчики ошибок после того, как будет налажен основной поток программы.)