我想统计用户计算机上的登录和注销次数。我从 Windows 事件日志(来自 Win32_NTLogEvent WMI 类)中获取登录/注销信息。例如使用以下查询:
select * from Win32_NtLogEvent
where EventCode = 4648 and TimeGenerated > '20120224000000.000000-***'
但是当计算机重新启动或启动时,它计为 3 次登录,当用户单击注销或锁定(从开始菜单)然后登录时,它计为 1 次登录。用户通过 Windows Active Directory 进行身份验证。对登陆次数有影响吗?我可以只计算使用用户显式凭据的登录次数吗?
我发现 EventCode: 4608 和 4609 用于启动和关闭 Windows,但我还需要用户注销或锁定计算机时的登录次数。
最佳答案
我找到了这个解决方案 here :
strComputer = "."
Set objWMIService = GetObject("winmgmts:{(Security)}\\" & _
strComputer & "\root\cimv2")
Set colEvents = objWMIService.ExecQuery _
("SELECT * FROM Win32_NTLogEvent WHERE LogFile = 'Security' AND " & _
"EventCode = 528 AND User = 'fabrikam\\kmyer'")
Wscript.Echo colEvents.Count
只需将值替换为您想要的值即可。
现在这不是 Java 而是 VB 代码...但是它显然使用了您可以在 Java 程序中使用的 WMI 接口(interface)。或者您可以做一些丑陋的事情并从 Java(或计划任务)调用批处理脚本并读取其输出,或使用绑定(bind)。
当然,正如您的问题所暗示的那样,这当然是假设您想在用户的计算机上进行检查。如果你想在更全局的层面上计算来自不同机器的登录,那么你需要查询 Active Directory(或网络基础设施正在使用的其他机制);链接的线程也为此提供了解决方案。
更新:
你可以看看Eric Fitzgerald的 blog在 Tracking User Logon Activity Using Logon Events 上发帖,您有相应的代码(以及用于准确时间跟踪的完整公式)。
显然,您需要事件代码 4624 (LOGON) 和 4634 (LOGOFF),如果您计划使用 Fitzgerald 的公式来计算确切的 Activity 时间,还需要其他列出的代码。
关于java - 计算计算机 Windows 7 上的登录和注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9432929/