Windowsのログオン状況を記録する必要がある場合,ドメインコントローラでログオンイベントの監査で「成功の監査」を設定する方法が考えられますが,これはあるPCからドメインにログオンした時だけではなく,本当にログオフするまでの間に何度となくログオン,ログオフが記録されます。実際にログオン動作をしたとかログオフしたとかを正確に記録することはできません。
グループポリシーの中のユーザーの構成/Windowsの設定/スクリプトにログオンの時と,ログオフの時に実行するスクリプトを設定することができます。そこで,簡単なスクリプトを動かして,ログオンとログオフの記録を取る方法を考えました。
■スクリプト
Const AUDIT_SUCCESS = 8 REM Create Objects Set objShell = WScript.CreateObject("WScript.Shell") Set objNetwork = WScript.CreateObject("WScript.Network") Set objADsys = CreateObject("ADSystemInfo") REM Build a message string strMsg = "<Logon> ユーザ" + objNetwork.UserName + " が、ドメイン" + _ objNetwork.Userdomain + " (サーバー" + objADsys.GetAnyDCName + _ ")にログオンしました。" REM Write to Eventlog objShell.LogEvent AUDIT_SUCCESS,strMsg,objADSys.GetAnyDCName Set objShell = Nothing Set objNetwork = Nothing Set objADSys = Nothing |
このスクリプトをポリシーのログオンスクリプトに設定します。
この状態でクライアントをログオン・ログオフすると、先述の「800A0046」というエラーがでる。これは書き込み権限がないというエラーがでるので修正が必要です。まず、%windir%\Infにあるsceregvl.inf の修正から。 この設定ファイルの [Register Registry Values] セクションの最後に次のものを追記する。
MACHINE\System\CurrentControlSet\Services\Eventlog\Application\CustomSD,1,%AppCustomSD%,2 MACHINE\System\CurrentControlSet\Services\Eventlog\Security\CustomSD,1,%SecCustomSD%,2 MACHINE\System\CurrentControlSet\Services\Eventlog\System\CustomSD,1,%SysCustomSD%,2 MACHINE\System\CurrentControlSet\Services\Eventlog\Directory Service\CustomSD,1,%DSCustomSD%,2 MACHINE\System\CurrentControlSet\Services\Eventlog\DNS Server\CustomSD,1,%DNSCustomSD%,2 MACHINE\System\CurrentControlSet\Services\Eventlog\File Replication Service\CustomSD,1,\ %FRSCustomSD%,2 |
[String]セクションには
AppCustomSD="Eventlog: Security descriptor for Application event log" SecCustomSD="Eventlog: Security descriptor for Security event log" SysCustomSD="Eventlog: Security descriptor for System event log" DSCustomSD="Eventlog: Security descriptor for Directory Service event log" DNSCustomSD="Eventlog: Security descriptor for DNS Server event log" FRSCustomSD="Eventlog: Security descriptor for File Replication Service event log" |
を追記します。あとはコマンドラインで「 regsvr32 scecli.dll 」を実行して成功を確認します。
これでグループポリシーの コンピュータの構成→Windowsの設定→セキュリティの設定→ローカルポリシー→セキュリティオプションにEventLog~というのが幾つか追加されています。
「Eventlog: Security descriptor for Application event log」をダブルクリック。「このポリシーの設定を定義する」をチェックして、「 O:BAG:SYD:(A;;0x3;;;AU)」 と入力。 これでやっと先のスクリプトが正常に動き、イベントビューアのアプリケーションログにWSHからのログとして記録が書き込まれるようになります。