何となくWindows OS用のログオンスクリプトとログオフスクリプトを作ってみました。おそらくWindows XP以降のOSであれば稼働するはずです。
利用する場合には、グループポリシーから設定してください。
ログオンスクリプト
ログインユーザ名を取得してイベントログに書き込みます。
On Error Resume Next Set objSysInfo = CreateObject("ADSystemInfo") Set WshShell = WScript.CreateObject("WScript.Shell") strUser = objSysInfo.UserName strComputer = objSysInfo.ComputerName Set objUser = GetObject("LDAP://" & strUser) strMessege = "ログオンスクリプトが起動しました。" & vbCrLf _ & objUser.displayName & "(" & objUser.userPrincipalName & ")がログインしました。" WshShell.LogEvent 0, strMessege
ログオフスクリプト
ログインユーザ名と端末の起動開始時間、および連続稼働時間をイベントログに書き込みます。
On Error Resume Next '---------------プログラムここから--------------- Set objSysInfo = CreateObject("ADSystemInfo") Set WshShell = WScript.CreateObject("WScript.Shell") strUser = objSysInfo.UserName strComputer = "." Set objUser = GetObject("LDAP://" & strUser) strMessege = "ログオフスクリプトが起動しました。" & vbCrLf &_ objUser.displayName & "(" & objUser.userPrincipalName & ")がログオフしました。" & vbCrLf &_ QUERY_UPTIME(strComputer) 'イベントログの書き込み WshShell.LogEvent 0, strMessege '---------------プログラムここまで--------------- Function QUERY_UPTIME(strComputer) Set objWMIService = GetObject _ ("winmgmts:\\" & strComputer & "\root\cimv2") Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem") For Each objOS in colOperatingSystems dtmBootup = objOS.LastBootUpTime Next dtmLastBootupTime = WMIDateStringToDate(dtmBootup) dtmSystemUptime = DateDiff("h", dtmLastBootUpTime, Now) QUERY_UPTIME = "このコンピュータが起動した時刻は" & dtmLastBootupTime & "です。" & vbCrLf &_ "現在の連続稼働時間は約" & dtmSystemUptime & "時間です。" End Function Function WMIDateStringToDate(dtmBootup) WMIDateStringToDate = CDate(Mid(dtmBootup, 5, 2) & "/" &_ Mid(dtmBootup, 7, 2) & "/" & Left(dtmBootup, 4) & _ " " & Mid (dtmBootup, 9, 2) & ":" & Mid(dtmBootup, 11, 2) &_ ":" & Mid(dtmBootup, 13, 2)) End Function
ログオン時に経過時間を取得して、3日とか4日とか連続で起動している端末があったら、ポップアップで警告を出したり、もしくはログイン時に再起動を仕込んでみたり・・・とか、面白いですが問題になりそうですね。