Java 统计Windows 7计算机上的登录和注销次数
我想统计一下他们计算机用户的登录和注销次数。我从Windows事件日志(从Win32\u NTLogEvent)获取登录/注销信息 WMI类)。例如,使用以下查询:Java 统计Windows 7计算机上的登录和注销次数,java,windows,windows-7,wmi,jacob,Java,Windows,Windows 7,Wmi,Jacob,我想统计一下他们计算机用户的登录和注销次数。我从Windows事件日志(从Win32\u NTLogEvent)获取登录/注销信息 WMI类)。例如,使用以下查询: select * from Win32_NtLogEvent where EventCode = 4648 and TimeGenerated > '20120224000000.000000-***' 但是,当计算机重新启动或启动时,它会计3次登录,当用户单击“注销”或“锁定”(从“开始”菜单)然后登录时,它会计1次登录。
select * from Win32_NtLogEvent
where EventCode = 4648 and TimeGenerated > '20120224000000.000000-***'
但是,当计算机重新启动或启动时,它会计3次登录,当用户单击“注销”或“锁定”(从“开始”菜单)然后登录时,它会计1次登录。用户通过Windows Active Directory进行身份验证。它会影响登录次数吗?我可以只计算用户使用显式凭据登录的次数吗
我找到了用于启动和关闭Windows的事件代码:4608和4609,但我还需要用户注销或锁定计算机时的登录次数。我找到了以下解决方案:
只需将这些值替换为所需的值
这不是Java而是VB代码。。。但是,它显然使用了可以从Java程序中使用的WMI接口。或者,您可以做一些难看的事情,从Java(或计划任务)调用批处理脚本并读取其输出,或者使用绑定
当然,这是假设您想在用户的计算机上检查这一点,正如您的问题所暗示的那样。如果您想在更全局的级别上统计来自不同机器的登录次数,那么您需要查询Active Directory(或网络基础设施正在使用的其他机制);链接线程也为此提供了解决方案
更新:
您可以在上查看的帖子,其中有相应的代码(以及精确时间跟踪的完整公式)
显然,如果您计划使用Fitzgerald公式计算确切的活动时间,您需要事件代码4624(登录)和4634(注销),以及此处列出的其他代码。更好的方法是使用 由RegisterServiceCtrlHandlerEx定义的回调函数可以配置为接收包括登录、注销、锁定和解锁事件在内的事件 我不能完全确定HandlerEx接收到的注销事件是否可靠,或者它们是否显示出与事件日志相同的问题。作为备份,允许您定义回调函数以接收注销通知。这些通知是可靠的
远程桌面服务API函数(如)也可能很有用,允许您在任何给定时间列出当前登录的用户,或获取有关给定会话的其他信息。工作站上只有这些功能的一部分可用,但它们正是您需要的功能。不知道这是否有帮助:您是在尝试计数解锁工作站,还是试图避免计数?我正在尝试计数用户在计算机上花费的时间。您能发布一些示例输入(日志)吗?您想在特定的计算机上计数还是作为用户计数,而不管他在哪里登录?
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