Ext JS に関しては,新しい記事は Sunvisor Lab. ExtJS 別館 にあります。そちらもよろしくお願いいたします。

ログオン,ログオフ状況を記録するスクリプト

Windowsのログオン状況を記録する必要がある場合,ドメインコントローラでログオンイベントの監査で「成功の監査」を設定する方法が考えられ ますが,これはあるPCからドメインにログオンした時だけではなく,本当にログオフするまでの間に何度となくログオン,ログオフが記録されます。実際にロ グオン動作をしたとかログオフしたとかを正確に記録することはできません。

グループポリシーの中のユーザーの構成/Windowsの設定/スクリプトにログオンの時と,ログオフの時に実行するスクリプトを設定することができます。そこで,簡単なスクリプトを動かして,ログオンとログオフの記録を取る方法を考えました。

 

スクリプトの仕様としては,次のようなフィールドを持つCSV形式のレコードをログファイルに追加書き込みすることとします。

コラム フィールド内容 備考
1 イベント ログオンであるかログオフであるか
2 時刻 日付と時刻
3 コンピュータ名 ログオン(オフ)したコンピュータ名
4 ユーザ名 ログオン(オフ)したユーザ名
5 ドメイン名  
6 IPアドレス 複数ある場合は;で区切ってそのPCの全てのIPを記録

3~6のデータをについてはWMIを使って取得し,FileSystemObjectを使ってテキストファイルに出力します。

'ログオン・ログオフイベントを記録するスクリプト

sEvent = "LogOn"   'ログオフ用はここを変更する
sFileName = "\\server01\log\logon" & _
    Year(Now) * 100 + Month(Now) & ".log"

On Error Resume Next
Set FSO = CreateObject("Scripting.FileSystemObject")
Set wshNetwork = CreateObject("WScript.Network")

SearchPC = wshNetwork.ComputerName
Set objComputer = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & SearchPC)
Set NICs = objComputer.ExecQuery("select * from Win32_NetworkAdapterConfiguration")

For Each Adapter In NICs
    if UCase(Adapter.DNSHostName) = UCase(SearchPC) then
        IPAddress = Adapter.IPAddress
        IPSubnet = Adapter.IPSubNet
        DefaultIPGateway = Adapter.DefaultIPGateway
        sIP = ""
        sSubNet = ""
        sGateway = ""
        If IsArray(IPAddress) Then
            For I = LBound(IPAddress) To UBound(IPAddress)
                sIP = sIP & IPAddress(I) & ";"
                sSubNet = sSubNet & IPSubnet(I) & ";"
                sGateway = sGateway & DefaultIPGateway(I) & ";"
            Next
            sMAC = Adapter.MACAddress
            sWINS1 = Adapter.WINSPrimaryServer
            sWINS2 = Adapter.WINSSecondaryServer
        End If
        exit for
    end if
Next

sMsg = sEvent & "," & _
    Now & "," & _
    wshNetwork.ComputerName & "," & _
    wshNetwork.UserName & "," & _
    wshNetwork.UserDomain & "," & _
    sIP
set oText = FSO.OpenTextFile(sFileName, 8, true, 0)
oText.WriteLine(sMsg)
oText.Close
		

このスクリプトをポリシーのログオンスクリプトに設定し,スクリプトの先頭にあるsEventをLogOffに変えたものをログオフスクリプトに設 定します。sFileNameは,Logを記録する共有フォルダのUNCを指定します。この例ではファイル名の指定で月ごとにファイルが変わるようにして あります。

トラックバック


URL から "-MoIyadayo" を削除してトラックバックを送信してください。
トラックバックは承認後に表示されます。

ログオンログオフのイベント送出スクリプト

ドメインに参加しているコンピュータにログオン・ログオフしたときに、イベントログにログを残す。いろいろな記事をつぎはぎして作成しました。各記事の作成者様、ありがとうござい...