计算计算机Windows 7上的登录和注销

Sve*_*nov 7 java windows wmi jacob windows-7

我想计算其计算机用户的登录和注销数量.我从Windows事件日志(来自Win32_NTLogEvent WMI类)获取登录/注销信息.例如,使用以下查询:

select * from Win32_NtLogEvent
where EventCode = 4648 and TimeGenerated > '20120224000000.000000-***'
Run Code Online (Sandbox Code Playgroud)

但是当计算机重新启动或启动时,它会计算3次登录,当用户单击注销或锁定(从开始菜单)然后登录时,它会计数1次登录.用户通过Windows Active Directory进行身份验证.它会影响登录次数吗?我是否可以只计算使用显式凭据的登录次数?

我发现EventCode:4608和4609用于启动和关闭Windows但我还需要在用户注销或锁定计算机时登录的次数.

hay*_*lem 4

在这里找到了这个解决方案:

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
Run Code Online (Sandbox Code Playgroud)

只需将这些值替换为您想要的值即可。

现在这不是 Java 而是 VB 代码...但是它显然使用了您可以在 Java 程序中使用的 WMI 接口。或者,您可以做一些难看的事情,从 Java(或计划任务)调用批处理脚本并读取其输出,或者使用绑定。

当然,正如您的问题所暗示的那样,这是假设您想在用户的计算机上检查这一点。如果您想在更全局的级别上对来自不同计算机的登录进行计数,那么您需要查询 Active Directory(或网络基础设施正在使用的其他机制);链接的线程也为此提供了解决方案。

更新:

您可以查看Eric Fitzgerald博客文章《使用登录事件跟踪用户登录活动》,其中有相应的代码(以及用于准确时间跟踪的完整公式)。

显然,如果您计划使用 Fitzgerald 公式来计算确切的活动时间,您需要事件代码 4624 (LOGON) 和 4634 (LOGOFF),以及其中列出的其他代码。