[ADSI プログラミング デバッグ] やっぱり VBScript がいい !! という方へ – 1
こんにちは、ILM 一家のパパ(お父さん)です。
前回、自称癒し系とお話しましたが、お母さん(ういこさん) と息子(ぴろと) に言わせると、私はイヤラシ系だそうです。たった一字違うだけなのに、非常に残念な言われようで、ホントに失礼な人たちです。
2/14 はバレンタインデーでしたね、私は前日にお母さん(ういこさん) から、チョコレートとスコーンをいただきました。 もう、朝からうれしくて良い一日でした、本当にありがとうお母さん(ういこさん)。最高に美味しかったよ。
それに、昨年は、近所のガキンチョに手作りチョコを渡しながら、父親の私には買ったものを渡した娘(実子)も、今年はチョコを手作り(以下写真)してくれました。 しかし、ホント昨年はへこみました。
でも、文字 は ”おしごとがんばってね” じゃなくて “ぱぱ だいいすき” でよかったのに…
お母さん(ういこさん) に言わせれば、”仕事しすぎ” らしいですけど、 “もっと仕事してね” と感じてしまうのは、去年のトラウマが原因でしょう。
さて、今回は、2/9 の掲載させていただいた、VBScript での動作トレース、デバッグ手法としてご紹介した、以下手法ついて、具合的なスクリプト例、実行操作をご紹介したいと思います。
1. プログラム実行位置、変数値などの確認情報を Echo 出力する。
2. プログラム実行位置、変数値などの確認情報を FileSystemObject 等でログファイル出力する。
それぞれ、標準出力、ファイル出力の差がありますが、CScript.exe を使用してコマンドプロンプトでスクリプト実行した場合、標準出力をファイルリダイレクトする事が可能なため、結果として両方の実装で、実行状況を出力ファイルにて確認する事が可能となります。
なお、スクリプトファイルをダブルクリックで実行するような場合、WScript.exe が使用されるため、ファイル出力には FileSystemObject を使って、スクリプトから直接ファイル出力する必要があります。
では、実際にそれぞれの手法を、2/9 の VBScript コードの拡張例として見ていただきましょう。
1. プログラム実行位置、変数値などの確認情報を Echo 出力する。
以下スクリプトはエラー発生時に情報を Echo 出力します。
Echo 出力内容 は Cscript.exe からの起動時には標準出力に、Wscript.exe からの起動時にはメッセージダイアログで表示されます。
コマンドプロンプトを開き、以下のようにスクリプトファイルを起動すれば、標準出力内容がテキストファイルにリダイレクトされます。
Ø CScript.exe xxxxxx.vbs > errlog.txt
' スクリプトセンター: パスワードの最終設定時の判別
' https://www.microsoft.com/japan/technet/scriptcenter/scripts/ad/users/pwds/uspwvb09.mspx
' ---------------------------------------------------------------
' エラー発生時、エラーメッセージ表示せず次行へ処理を進める
On Error Resume Next
ErrLine = 1: Err.Clear
Set objUser = GetObject _
("LDAP://CN=ILM_Papa, OU=Users,DC=microsoft,DC=com")
If Err.Number <> 0 then ErrSub
ErrLine = 2: Err.Clear
dtmValue = objUser.PasswordLastChanged
If Err.Number <> 0 then ErrSub
WScript.echo "pwdLastSet is: " & dtmValue
' エラー発生時、エラー行と、エラー番号を出力する
Sub ErrSub()
WScript.Echo("Line - " & ErrLine & " : Error Code - " & Err.Number)
End Sub
'---------------------------------------------------------------
2. プログラム実行位置、変数値などの確認情報を FileSystemObject 等でログファイル出力する。
以下のコードは、エラー発生時に情報をテキストファイル出力します。
直接ファイル出力する実装のため、スクリプト起動操作に依存せず状態をファイル出力可能です。
' スクリプトセンター: パスワードの最終設定時の判別
' https://www.microsoft.com/japan/technet/scriptcenter/scripts/ad/users/pwds/uspwvb09.mspx
' ---------------------------------------------------------------
' FileSystemObject で出力ファイルをオープンする
Const ForAppending = 2
Set objFSO = CreateObject("Scripting.FileSystemObject") ' FileSystemObject 作成
Set objTextFile = objFSO.OpenTextFile("Errlog.txt", ForAppending, True) ' FileOpen
'エラー発生時、エラーメッセージ表示せず次行へ処理を進める
On Error Resume Next
ErrLine = 1: Err.Clear
Set objUser = GetObject _
("LDAP://CN=ILM_Papa, OU=Users,DC=microsoft,DC=com")
If Err.Number <> 0 then ErrSub
ErrLine = 2: Err.Clear
dtmValue = objUser.PasswordLastChanged
If Err.Number <> 0 then ErrSub
WScript.echo "pwdLastSet is: " & dtmValue
objTextFile.Close ' FileClose
'エラー発生時、エラー行と、エラー番号を出力する
Sub ErrSub()
objTextFile.WriteLine("Line - " & ErrLine & " : Error Code - " & Err.Number)
End Sub
'---------------------------------------------------------------
いかがでしょうか、以上のような手法を用いることで、動作状況や、必要に応じて変数値などをファイルに出力いただけます。VBScript が予期しない動作をするような場合、実行動作をファイルに記録したい場合の手法として、参考になれば幸いです。
~ お父さんより ~