NETWORK ENGINEER BLOG

Tips and Reviews for Engineers

GPO でログオフ時間を記録する方法について

ドメイン環境化において、ユーザが端末からログオフした時間を、AD サーバーのイベントビューワーへ出力方法についてご紹介します。

ログオフスクリプトの作成

ログオフスクリプトはこちらを参考にさせて頂きました。
“\\AD01”は、スクリプトを配置する DC 名を指定します。

On Error Resume Next

' EVENTLOG_DC_NAME: イベントログを記録させたいDC名をUNCで指定
Const EVENTLOG_DC_NAME = "\\AD01"

' SCRIPT_PRE_MESSAGE: イベントログに書き込むメッセージの最初の文言
Const SCRIPT_PRE_MESSAGE = "[端末からログオフしました。] "

' WshShellオブジェクトとADSIオブジェクトを生成、取得
Set objShell = WScript.CreateObject("WScript.Shell")
Set objADSystemInfo = WScript.CreateObject("ADSystemInfo")

' ADのユーザーオブジェクトを取得
Set objUser = GetObject("LDAP://" & objADSystemInfo.UserName)

' ADのユーザーオブジェクトのGroupsプロパティから、所属グループ名を取得
strGroupNames = "MemberOf: CN=Domain Users"
For Each objGroup In objUser.Groups
    strGroupNames = strGroupNames & "," & objGroup.Name
Next

' 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

スクリプトの配置

スクリプトは以下のパスに配置します。※任意のパスでは実行されないので注意してください。

\\DC名\sysvol\ドメイン名\scrpits\

本例では、以下のパスに配置しています。

\\ad01\sysvol\example.com\scripts

GPO の設定

GPO を設定します。本例では「DaaS Users」というユーザ OU に、「Audit」と名前のポリシーをリンクしています。
f:id:FriendsNow:20181104150241p:plain

「Audit」ポリシーで「ログオフスクリプト」を指定します。
f:id:FriendsNow:20181104150357p:plain

GPO を更新します。

gpupdate /force

アクセス権の設定

通常、イベントビューワーへの書き込みは Domain_Admins グループに属するアカウントでのみ許可されています。一般ユーザーで書き込みができるようDC 上で、以下のコマンドを実行します。

wevtutil sl application /ca:O:BAG:SYD:(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x7;;;SO)(A;;0x3;;;IU)(A;;0x3;;;SU)(A;;0x3;;;S-1-5-3)(A;;0x3;;;S-1-5-33)(A;;0x1;;;S-1-5-32-573)(A;;0x3;;;DU)

イベントビューワーの出力結果

ドメイン環境化の端末からユーザーがログオフすると、AD のイベントビューワーの「WIndows ログ」「Application」でログオフ時間を確認できます。
f:id:FriendsNow:20181104151059p:plain

以上