Sunvisor Lab.

Register Now | Log in | Lost Password

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

トップ (メニュー)  >  Windowsバッチ&スクリプト  >  ログオン,ログオフ状況を記録するスクリプト

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を指定します。この例ではファイル名の指定で月ごとにファイルが変わるようにしてあります。

プリンタ用画面
友達に伝える
投票数:9 平均点:7.78

前
Robocopyでフォルダをコピー
カテゴリートップ
Windowsバッチ&スクリプト
次
ログオン時にドライブやプリンタを割り当てる
Powered by XOOPS Cube 2.0 © 2005-2006 The XOOPS Project | Designd by Theme4u.Net