' 2012/07/02 On Error Resume Next ' ################################################ ' EVENTLOG_DC_NAME: イベントログを記録させたいドメインコントローラー名を、UNCで指定する。 ' SCRIPT_PRE_MESSAGE: イベントログに書き込むメッセージの最初の文言。必要なければ空文字でも構わない。 Const EVENTLOG_DC_NAME = "\\DC_NAME" Const SCRIPT_PRE_MESSAGE = "[LOGOFF SUCCESS] " ' ################################################ ' WshShellオブジェクトとADSIオブジェクトを生成、取得。 Set objShell = WScript.CreateObject("WScript.Shell") Set objADSystemInfo = WScript.CreateObject("ADSystemInfo") ' ADのユーザーオブジェクトを取得。 Set objUser = GetObject("LDAP://" & objADSystemInfo.UserName) ' ADのユーザーオブジェクトのGroupsプロパティから、所属グループ名を取得。 ' Groupsには、ユーザーのプライマリグループは含まれない。通常、ドメインユーザーのプライマリグループのデフォルトはDomain Usersなので、ここではそれを前提としている。 strGroupNames = "MemberOf: CN=Domain Users" For Each objGroup In objUser.Groups strGroupNames = strGroupNames & "," & objGroup.Name Next ' EventCreateコマンドでイベントログを書き込む。 ' 一般ユーザーがアプリケーションログに書き込むためには、ドメインコントローラーEVENTLOG_DC_NAME上であらかじめ、イベントログへの書き込み権限を付与しておく必要がある。 ' WshShell.Runメソッドの第二引数は、コマンドの実行方法。7は、「ウィンドウを最小化したまま、既存のフォーカスを変えずに実行する」という意味。 ' ログオフスクリプトの場合、WshShell.Runメソッドの第三引数をTrue指定することが必須。さもないと、EventCreateの実行を待たずにログオフしてしまい、イベントログが記録されない。 objShell.Run "EVENTCREATE /S " & EVENTLOG_DC_NAME & " /T INFORMATION /L APPLICATION /ID 8 /D " & """" & SCRIPT_PRE_MESSAGE & strGroupNames & """", 7, True ' 明示的な後始末。 Set objShell = Nothing Set objADSystemInfo = Nothing Set objUser = Nothing