Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 统计Windows 7计算机上的登录和注销次数_Java_Windows_Windows 7_Wmi_Jacob - Fatal编程技术网

Java 统计Windows 7计算机上的登录和注销次数

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次登录。

我想统计一下他们计算机用户的登录和注销次数。我从Windows事件日志(从Win32\u NTLogEvent)获取登录/注销信息 WMI类)。例如,使用以下查询:

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