タグ別アーカイブ: script

ADへのログオン・ログオフイベントを追跡する(Eventcreate+LogParser編)

WindowsServer2003とWindowsXP以降の環境で利用できます。

概要は次の通り。

  1. クライアントPCからEventcreateコマンドで、DCのイベントログにログオン・ログオフの度にイベントを書き込む。
  2. 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のスクリプトのスケジュール設定を行えば、ログオン・ログオフの履歴を取得することができます。

ネットワーク上のフォルダの有無を確認してショートカットを作成する

サーバ名はserver1。

usersフォルダを共有し、その下にログオンユーザ名でフォルダが存在。

Set objFSO = CreateObject(“Scripting.FileSystemObject”)
Set objShell = WScript.CreateObject(“WScript.Shell”)
strDesktop = objShell.SpecialFolders(“Desktop”)
strFileName = strDesktop + “public_html.lnk”
Set objShortCut = objShell.CreateShortcut(strFileName)
username = objShell.ExpandEnvironmentStrings(“%USERNAME%”)

If objFSO.FolderExists(“\server1users” & username) Then
objShortCut.TargetPath = “\server1users%USERNAME%”
objShortCut.Save
WScript.Echo strFileName & “にショートカットを作成しました。”
Else
Wscript.Echo “フォルダが存在しません。”
End If

動作:

\server1users%username%のフォルダの存在をチェックし、フォルダがあれば、デスクトップにpublic_htmlという名称で、当該フォルダへのショートカットを作成します。無ければ、「フォルダが存在しません。」というメッセージが表示されます。

利用シナリオ:

ログオンスクリプトで実行します。