如何计算用户登录到计算机的次数?

来源:互联网 发布:软件快捷方式打不开 编辑:程序博客网 时间:2024/05/17 01:20
 
问:

您好,脚本专家!如何计算用户登录到计算机的次数?

-- DE

答:

您好,DE。您是如何计算用户登录到计算机的次数?问得好,但最终的回答可能是:没办法计算。不过,我们至少可以对一些可能的解决方法进行研究,看其中的某些方法是否有助于解决问题。

首先,我们要弄清楚登录到计算机和登录到域之间的区别。如果运行了 Active Directory,就可以确定用户登录到域的次数;因为该用户帐户对象包含一个“LogonCount”属性,它可对这一情况进行跟踪。

但它有一个局限性,就是不能在域控制器间复制 LogonCount 属性。这重要吗?如果只有一个域控制器,这根本无关紧要。不过,如果有多个域控制器,就需要绑定到其中的每个计算机,检索登录次数,然后将这些数字相加,才能得出用户登录到域的次数。换句话说,Ken Myer 可能由域控制器 A 验证了 5 次,由域控制器 B 验证了 3 次。您需要将这两个数字(5 和 3)相加,才能确定 Ken 登录到域的次数为 8 次。

顺便提一句,以下脚本绑定到域控制器 atl-dc-01 并回显用户 Ken Myer 的 LogonCount 值:

Set objUser = GetObject _    ("LDAP://atl-dc-01/cn=ken myer, ou=Finance, dc=fabrikam, dc=com")Wscript.Echo objUser.LogonCount

同样,您需要分别为每个域控制器运行一次这个脚本,才能得出 Ken Myer 的准确登录次数。

当然啦,您提出的问题是计算用户登录到计算机的次数。这就有一点棘手了,遗憾的是,WinNT 提供程序(用于管理本地用户帐户和 Windows NT 4.0 域帐户)不支持 LogonCount 属性。因此,据我们所知,计算用户登录次数的唯一方法就是查询安全事件日志。如果启用了用户登录审核,每次用户成功登录到计算机时,都会在安全事件日志中记录一个事件(使用事件代码 528)。要了解 Ken Myer 登录到计算机的次数,只需在安全事件日志中查询所有“EventCode”等于 528 且“User”为 fabrikam//kmyer 的事件(是的,查询中必须使用两个 /):

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

以上脚本可以达到预期效果,但有一些需要注意的地方。首先,如果没有启用审核功能,则不会将这些记录写入到安全事件日志中。其次,每次清除事件日志时,都会清除所有事件。结果,相当于将所有用户的所有登录次数都重置为 0。如果想保留用户登录的连续记录,只有两个办法:永远都不要清除事件日志(不建议这样做),或者每次在真的要清除事件日志时做记录。这项任务并非难到真的无法完成,但也并非像您多半以为的那样简单。不过,这几乎是我们可以选择的唯一方法了。