博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lastLogon和lastLogonTimestamp的区别
阅读量:6577 次
发布时间:2019-06-24

本文共 1585 字,大约阅读时间需要 5 分钟。

如何得到用户最近一次登陆域的时间?在Windows2003域中有2个属性:lastLogon和lastLogonTimestamp,那么这2个属性到底有什么作用呢?

lastLogon属性实时更新用户登录时间,但它不会从一个DC复制到另一个DC。假设一个用户登录到了DC A上,那么DCA上lastLogon既是用户的最近登录时间,但如果你在DCB上查询用户的最近登录时间,得到的结果将会是该用户没有登录过,尽管此时用户正登录在域上。

lastLogonTimestamp属性会从一个DC复制到另一个DC。因此,不论你查询域中任何一个DC,都会得到相同的结果。但是lastLogonTimestamp属性不反映确切的“最后登录时间”,为什么呢?想像一下,一群用户每天要登陆注销好几次,每次登陆状态都要复制到整个域的每台DC,这将可能导致相当大的复制流量。而通常情况下,我们仅仅关心那些在过去几周内没有登录过的“陈旧”帐号,而不需要一个精确到分秒的最后的登录状态。因此,lastLogonTimestamp隔14天才复制一次,从而减少复制流量,但同时也意味着,对任何用户来说,这个时间可能有14天的偏移。

因此,如果你想获得用户精确的最近登录时间,只能查询每一台DC的lastLogon属性,然后进行比对。但如果你仅仅想知了解过去的2周内是否有用户没有登录过,那么查询lastLogonTimestamp就好了。

使用VBScript查询lastLogonTimestamp有2个问题:

  • lastLogonTimestamp是一个64-bit integer,VBScript不支持64位整数。但ADSI'sIADsLargeInterger接口可以将64为整数化成一对32位整数,这样VBScript就可以处理了。
  • 当我们查询lastLogonTimestamp,得到的结果不是一个日期,而是一个数字,这个数字代表从1601年1月1日(星期一)0点到用户最后登录时间中间有多少个100纳秒。因此,我们还需要将这个数字转换为可以读懂的日期时间。

VBScript脚本如下:

  1. Set objUser =GetObject("LDAP://"& cn=Ken Myer, ou=Finance, dc=fabrikam,dc=com)
  2. Set objLastLogon =objUser.Get("lastLogonTimestamp")
  3. intLastLogonTime = objLastLogon.HighPart* (2^32) + objLastLogon.LowPart
  4. intLastLogonTime = intLastLogonTime / (60* 10000000)
  5. intLastLogonTime = intLastLogonTime /1440
  6. Wscript.Echo "Last logontime: " & intLastLogonTime +#1/1/1601#
  • 绑定AD用户
  • 使用Get方法获得lastLogonTimestamp,存储在IADsLargeInterger对象中。通常,我们不需要告诉ADSI使用什么接口,也不用创建IADsLargeInteger对象的实例,ADSI会自动识别。
  • IADsLargeInteger对象使用HighPart存储64位整数的高32位,LowPart存储低32位。
  • 1秒=10^9纳秒,therefore,1s=10^7×100ns,then,1m=60×10^7 ×100ns。
  • 24h×60m=1440
  • 我们已经将数字转换成天数,因此只要加上1601年1月1日,便可得到结果了。

原文:

转载于:https://www.cnblogs.com/IvanChen/p/4494762.html

你可能感兴趣的文章
ADO.NET笔记——使用DataSet返回数据
查看>>
Python脚本日志系统
查看>>
gulp常用命令
查看>>
TCP(Socket基础编程)
查看>>
RowSet的使用
查看>>
每日一记--cookie
查看>>
WPF and Silverlight 学习笔记(十二):WPF Panel内容模型、Decorator内容模型及其他...
查看>>
IOS 7 Study - UISegmentedControl
查看>>
八、通用类型系统
查看>>
JQuery的ajaxFileUpload的使用
查看>>
关于Integer类中parseInt()和valueOf()方法的区别以及int和String类性的转换.以及String类valueOf()方法...
查看>>
ios 控制器的生命周期
查看>>
C#动态代理
查看>>
使用 sessionStorage 创建一个本地存储的 name/value
查看>>
Python笔记8----DataFrame(二维)
查看>>
JavaScript 特殊效果代码
查看>>
【?】codeforces721E Road to Home(DP+单调队列)
查看>>
MySQL 仅保留7天、一个月数据
查看>>
Win7下安装Mysql(解压缩版)
查看>>
UVA 11992 Fast Matrix Operations (降维)
查看>>