WindowsServer2003とWindowsXP以降の環境で利用できます。
概要は次の通り。
- クライアントPCからEventcreateコマンドで、DCのイベントログにログオン・ログオフの度にイベントを書き込む。
- DCのイベントログをLogParserから検索・出力する。
当初は、WSHからDCのイベントログへの書き込もうとしましたが、そうすると、イベントログのSID(ユーザ)がN/Aとなり、どのユーザからのログオンなのか判別がつかなくなりました。もちろんMessage領域に%USERNAME%を書き込むことで、文字列を取得することは出来ますが、イベントログのSIDに納めるほうが、より直感的なのでEventcreateを利用することにしました。
・ログオン
eventcreate /s %LOGONSERVER% /u %username% /l application /t SUCCESS /ID 1 /d “%LOGONSERVER:~2%”
・ログオフ
eventcreate /s %LOGONSERVER% /u %username% /l application /t SUCCESS /ID 2 /d “%LOGONSERVER:~2%”
今回は ログオン先を取得したかったので、Message領域に%LOGONSERVER%を格納しています。
Eventecreateコマンドでは書き込み先のイベントログ種別を選択することができますが、今回はアプリケーションログに書き込んでいます。
なお、WindowsServer2003のイベントログに対してリモートユーザがログの書き込みを行う際は下記リンクの処理が必要になります。
http://support.microsoft.com/kb/323076/ja
私はDCのレジストリを修正することで対応しました。
書き込み先がアプリケーションログなので変更するレジストリは次のものになります。
HKEY_LOCAL_MACHINESystemCurrentControlSetServices
EventlogApplicationCustomSD
このキーの値に、(A;;0x3;;;AU)を追記することで、AuhtenticatedUsersからの書き込みが可能になります。
また、ここでは出力先をCSVファイルに指定していますが、LogParserではデータベースを出力先とすることが可能です。今回は出力したCSVファイルをbcpコマンドでDBに取り込むことにしました。
あとはログオンスクリプト、ログオフスクリプトの設定、LogParserのスクリプトのスケジュール設定を行えば、ログオン・ログオフの履歴を取得することができます。