【IDM】監査イベントを監視してユーザー管理を自動化するためのスクリプト(汎用版)

4月24日のセミナー「AD 次の一手」にて、「小規模なシステムの場合には、高価なパッケージではなくスクリプトレベルのプログラミングで同期を行うことも可能」というお話をしました。

セミナー資料にはスクリプトを掲載することができませんでしたが、ここに使用したスクリプトを掲載いたします。

以下のスクリプトは、DC001 というドメインコントローラに接続して、監査イベント 4720 と 5136 を待ち合わせるものです。VBscript で書かれていますので、拡張子を vbs として保存し、コマンドプロンプトから実行してください。

CScript xxxxx.vbs

くれぐれも、あたまの CScript を忘れないでください。忘れると、ポップアップメッセージが大量に表示されることになります。もしくは、以下のコマンドで、事前にスクリプトのホストを cscript に変更しておきましょう。

Cscript //h:cscript

ユーザー管理に関する監査イベントの詳細については、以下をご参照ください。 

【Windows Server 2008】監査イベントの Event ID が変わります
http://blogs.technet.com/junichia/archive/2008/01/11/2008-id.aspx

strDC = "DC001"UserAdmin = ""UserPassword = ""

Rec = now & ",ドメインコントローラに接続します," & "DC=" & strDCSet objLocator = CreateObject("WbemScripting.SWbemLocator")objLocator.Security_.Privileges.AddAsString "SeSecurityPrivilege", TrueSet objService = objLocator.ConnectServer(DC, "root\cimv2", UserAdmin, UserPassword)

If Err.Number = 0 Then   Rec = now & ",ドメインコントローラへの接続完了," & "DC=" & strDC   wscript.echo RecEnd If

strQuery = "Select * from __InstanceCreationEvent WITHIN 10" & _           " where TargetInstance isa 'Win32_NTLogEvent' and " & _           "TargetInstance.LogFile='Security' and " & _           "(TargetInstance.EventCode='4720' Or TargetInstance.EventCode='5136')"

Set colMonitoredEvents = objService.ExecNotificationQuery(strQuery, "WQL", 48)

If Err.Number = 0 Then   Rec = now & "," & strDC & " の監査イベントを監視しています"   Wscript.Echo RecEnd If

Do

    set objLatestEvent = colMonitoredEvents.NextEvent

    Message = objLatestEvent.TargetInstance.Message    colMessage = split(Message,vbCrLf)    For each m in colMessage       Wscript.Echo m       'ここに  m を解析し、同期を行う処理を組み込む    Next

Loop 

実行結果例を以下に示します。

C:\tmp>cscript waitevent.vbsMicrosoft (R) Windows Script Host Version 5.7Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

2008/04/25 22:32:56,ドメインコントローラへの接続完了,DC=DC0012008/04/25 22:32:56,JUNICHIA03 の監査イベントを監視していますディレクトリ サービス オブジェクトが変更されました。

サブジェクト: セキュリティ ID: S-1-5-18 アカウント名: JUNICHIA03$ アカウント ドメイン: EXAMPLE64 ログオン ID: 0x451127

ディレクトリ サービス: 名前: example64.jp 種類: Active Directory ドメイン サービス

オブジェクト: DN: CN=junichia,CN=Users,DC=example64,DC=jp GUID: {94E6B11B-BCF9-407E-8B73-0CF88BA1638B} クラス: user

属性: LDAP 表示名: unixUserPassword 構文 (OID): 2.5.5.10 値: <Binary>

操作: 種類: 値が削除されました 相関 ID: {D55665FD-B5BA-4E64-BD95-E9D2CBE1A690} アプリケーションの相関 ID: -ディレクトリ サービス オブジェクトが変更されました。

サブジェクト: セキュリティ ID: S-1-5-18 アカウント名: JUNICHIA03$ アカウント ドメイン: EXAMPLE64 ログオン ID: 0x451127

ディレクトリ サービス: 名前: example64.jp 種類: Active Directory ドメイン サービス

オブジェクト: DN: CN=junichia,CN=Users,DC=example64,DC=jp GUID: {94E6B11B-BCF9-407E-8B73-0CF88BA1638B} クラス: user

属性: LDAP 表示名: unixUserPassword 構文 (OID): 2.5.5.10 値: <Binary>

操作: 種類: 値が追加されました 相関 ID: {D55665FD-B5BA-4E64-BD95-E9D2CBE1A690} アプリケーションの相関 ID: -