ADSIエラーをトラップする方法
VBScriptでは、エラーをトラップする方法はインラインエラー処理の1つだけです。 インラインエラーハンドラは、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の値を確認してください。
(最初にスクリプトをデバッグするときは、スクリプトの実行を停止させてエラーの原因となっている行番号を表示し、基本的なプログラムフローが正しくなった後にエラーハンドラを追加します。)