none
AD域控导出最近的登录时间的命令 RRS feed

  • 问题

  • 【背景描述】:AD 域控是 Windows server 2016 三个物理区域,分别域3个站点(每个站点2台域控服务器),共6个域控服务器,AD脚本导出:所以计算机的命令,

    Get-ADComputer -SearchBase "DC=XXX,DC=XXX" -Filter * -Property * | Select-Object Name,CanonicalName,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion,IPv4Address,LastLogonDate,whenCreated | Export-CSV d:\logs\computers_All_20200702.csv -Encoding utf8 –NoTypeInformation

    发现:其中相同的主机名任意一台域控:“LastLogonDate”的时间和不准确(距离上次登录时间较远),“LastLogonTimeStamp” 是一串数字

    【诉求】:如何在任意一台DC 上导出计算机的最后登录时间?

     一、LastLogon是记录某个账户上一次在该域控制器认证的时间。该属性是不会在域控制器之间复制的。

    所以,要是以前需要确定账户最后一次登录域的 时间,必须查看所有域控制器上的LastLogon,最大的那个值就代表了账户最后一次登录域的时间。LastLogon只会记录交互式登 录,Kerberos验证的用户。

    二、LastLogonTimeStamp的值会在所有域控制器间复制。

    所以管理员只要从一个域控制器上就能得到用户上次登录的信息。不过,LastLogonTimeStamp的值并不一定代表真实的最后一次登录域的时间。它是根据一个更新间隔来更新的(注意:要启用这个属性,域功能级 别必须是Windows Server 2003喔)。LastLogonTimeStamp会记录交互式登录,KerberosNTLM验证的用户。管理员利用该值对长时间没有登录的账号进行管理,该值能够反映出账号长时间没有登录。

    2020年7月4日 5:51

答案

  • 尊敬的客户,您好!

    感谢您的回复。

    =》当前站点有2台域控,是不是分别导出,然后比对一下,那个“LastLogon”值 最新?就是当下的最新时间?
    回答:是的。

    =》查询PC 当前站点的最新登录时间,是不是如果笔记本,先开机后插网线,“LastLogonDate”和“LastLogon” 均不更新?
    回答:根据我在测试环境中的测试,把网卡禁用以后,关机重启或者直接重启机器,然后登录,机器的LastLogon都是不更新的。

    =》请问PC上次登录域控的“校验时间”是什么呢?客户端联系域控制器的时间吗?=》是,看下PC 和域控通讯的时间,看哪个字段?如何准确的查看,尤其多域控主机下
    回答:我发现计算机更新计算机策略的时候也是需要联系DC的(即运行gpupdate /force或者组策略在后台更新的时候
    就是使用上面的命令看LastLogon这个属性。



    此致,
    Daisy Zhou

    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

    • 已标记为答案 super.ma 2020年7月22日 1:08
    2020年7月13日 4:40
    版主

全部回复

  • 尊敬的客户,您好!

    感谢您在我们的TechNet论坛发帖。

    我在我的环境中的PDC和BDC(3个DC,PDC,BDC,RODC都是在同一个site)上运行您给的命令:
    Get-ADComputer -SearchBase "DC=book,DC=com" -Filter * -Property * | Select-Object Name,LastLogonDate,LastLogonTimeStamp

    我看在我的测试环境中,不同DC上运行后的计算机的LastLogonDate都显示出来了,而且是一样的值。


    请问您那边的不同site的DC或者同一个site的DC上运行上面的命令得出的结果不一致,对吗?

    我检查发现用户和计算机都有LastLogonDate和LastLogonTimeStamp属性,请问您是咨询的用户的LastLogonDate和LastLogonTimeStamp属性吗?

    1.如果是用户的LastLogonDate属性,我们需要在每一台DC上查看,最近一次的登录时间就是LastLogonDate。
    2.或者强制整个林里的DC立即同步在一台DC上运行命令repadmin /syncall /AdeP),所有DC同步以后,然后在任意一台DC上运行如下命令获得LastLogonTimeStamp,最后再把这串数字转换为我们可以识别的时间。
    Get-ADUser -Filter * -Properties * |select name,lastlogon,lastlogonTimestamp
    使用如下的命令转换时间,三个中的任意一个都可以的。
    [datetime]::FromFileTime(132382809183912141)
    [datetime]::FromFileTime(132382809183912141).ToString('d MMMM')
    [datetime]::FromFileTime(132382809183912141).ToString('g')

    例如:


    参考文档:
    Converting LastLogon to DateTime format
    https://stackoverflow.com/questions/13091719/converting-lastlogon-to-datetime-format


    注意:此回复中包含第三方链接,我们提供此链接旨在于方便参考, Microsoft 不能保证此链接中的任何信息和内容的有效性。


    此致,
    Daisy Zhou

    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

    2020年7月7日 2:40
    版主
  • 尊敬的客户,您好!

    感谢您在我们的TechNet论坛发帖。

    我在我的环境中的PDC和BDC(3个DC,PDC,BDC,RODC都是在同一个site)上运行您给的命令:
    Get-ADComputer -SearchBase "DC=book,DC=com" -Filter * -Property * | Select-Object Name,LastLogonDate,LastLogonTimeStamp

    我看在我的测试环境中,不同DC上运行后的计算机的LastLogonDate都显示出来了,而且是一样的值。


    请问您那边的不同site的DC或者同一个site的DC上运行上面的命令得出的结果不一致,对吗?

    我检查发现用户和计算机都有LastLogonDate和LastLogonTimeStamp属性,请问您是咨询的用户的LastLogonDate和LastLogonTimeStamp属性吗?

    1.如果是用户的LastLogonDate属性,我们需要在每一台DC上查看,最近一次的登录时间就是LastLogonDate。
    2.或者强制整个林里的DC立即同步在一台DC上运行命令repadmin /syncall /AdeP),所有DC同步以后,然后在任意一台DC上运行如下命令获得LastLogonTimeStamp,最后再把这串数字转换为我们可以识别的时间。
    Get-ADUser -Filter * -Properties * |select name,lastlogon,lastlogonTimestamp
    使用如下的命令转换时间,三个中的任意一个都可以的。
    [datetime]::FromFileTime(132382809183912141)
    [datetime]::FromFileTime(132382809183912141).ToString('d MMMM')
    [datetime]::FromFileTime(132382809183912141).ToString('g')

    例如:


    参考文档:
    Converting LastLogon to DateTime format
    https://stackoverflow.com/questions/13091719/converting-lastlogon-to-datetime-format


    注意:此回复中包含第三方链接,我们提供此链接旨在于方便参考, Microsoft 不能保证此链接中的任何信息和内容的有效性。


    此致,
    Daisy Zhou


    感谢你的回复

    描述有些误解

    ABC三个物理区域的站点(单林单域多站点),我用命令导出的“LastLogonDate”时间都是一致的;

    Get-ADComputer -SearchBase "DC=XXX,DC=XXX" -Filter * -Property * | Select-Object Name,CanonicalName,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion,IPv4Address,LastLogonDate,whenCreated | Export-CSV d:\logs\computers_All_20200702.csv -Encoding utf8 –NoTypeInformation

    1、是不是得出的结论:任意一台DC 都可以用上述脚本导出所有的PC的 “LastLogonDate” 且时间是一致的?

    使用LastLogonDate属性,您将不必转换日期/时间。 转换后,lastLogonTimestamp应等于LastLogonDate这样,您将获得整个域的最后登录日期和时间,而无需转换结果。

    2、发现某一台PC“LastLogonDate”的时间是:2020/6/28  8:31:37

    距离当前的时间2020/7/7 13:57:30间隔这么远?何故?

    3、“lastlogonTimestamp”这个字段,可以用上述脚本直接转换获得“上次登录时间”?

    2020年7月7日 6:00
  • 尊敬的客户,您好!

    感谢您的回复。

    1、是不是得出的结论:任意一台DC 都可以用上述脚本导出所有的PC的 “LastLogonDate” 且时间是一致的?
    使用LastLogonDate属性,您将不必转换日期/时间。 转换后,lastLogonTimestamp应等于LastLogonDate。这样,您将获得整个域的最后登录日期和时间,而无需转换结果。

    >>根据我的进一步测试,我发现LastLogonDate就是LastLogontimestamp的转换版本。
    所以现在有三个属性:LastLogon, LastLogonTimeStamp 和 LastLogonDate
    LastLogon不在域控制器之间复制;
    LastLogonTimeStamp在域控制器之间复制;
    LastLogonDate就是LastLogontimestamp的转换版本,能够一眼看出来时间。


    我在我的另一个测试环境中的三个DC上运行以上命令,发现每个DC上显示的机器的LastLogon都不一样,那么我们需要在每一台DC上查看每个机器的LastLogon,然后转换过来,最近的一次登录时间就是LastLogon.

    以下文章说明了LastLogonDate就是LastLogontimestamp的转换版本,但是说明的是用户的这个属性,通过以上的测试,我发现计算机也是类似的。
    Understanding the AD Account attributes - LastLogon, LastLogonTimeStamp and LastLogonDate
    https://social.technet.microsoft.com/wiki/contents/articles/22461.understanding-the-ad-account-attributes-lastlogon-lastlogontimestamp-and-lastlogondate.aspx


    2、发现某一台PC“LastLogonDate”的时间是:2020/6/28  8:31:37

    距离当前的时间2020/7/7 13:57:30间隔这么远?何故?
    >>参见问题1的回复。


    3、“lastlogonTimestamp”这个字段,可以用上述脚本直接转换获得“上次登录时间”?
    >>参见问题1的回复。LastLogonDate就是LastLogontimestamp的转换版本。
    如果需要得到机器的LastLogon,我们还是需要在每一台DC上获得每一台机器的LastLogon,然后转换过来,那么最近的登录时间就是某台机器的上次登录时间(LastLogon)。


    此致,
    Daisy Zhou

    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

    2020年7月8日 8:03
    版主
  • 尊敬的客户,您好!

    感谢您的回复。

    1、是不是得出的结论:任意一台DC 都可以用上述脚本导出所有的PC的 “LastLogonDate” 且时间是一致的?
    使用LastLogonDate属性,您将不必转换日期/时间。 转换后,lastLogonTimestamp应等于LastLogonDate。这样,您将获得整个域的最后登录日期和时间,而无需转换结果。

    >>根据我的进一步测试,我发现LastLogonDate就是LastLogontimestamp的转换版本。
    所以现在有三个属性:LastLogon, LastLogonTimeStamp 和 LastLogonDate
    LastLogon不在域控制器之间复制;
    LastLogonTimeStamp在域控制器之间复制;
    LastLogonDate就是LastLogontimestamp的转换版本,能够一眼看出来时间。


    我在我的另一个测试环境中的三个DC上运行以上命令,发现每个DC上显示的机器的LastLogon都不一样,那么我们需要在每一台DC上查看每个机器的LastLogon,然后转换过来,最近的一次登录时间就是LastLogon.

    以下文章说明了LastLogonDate就是LastLogontimestamp的转换版本,但是说明的是用户的这个属性,通过以上的测试,我发现计算机也是类似的。
    Understanding the AD Account attributes - LastLogon, LastLogonTimeStamp and LastLogonDate
    https://social.technet.microsoft.com/wiki/contents/articles/22461.understanding-the-ad-account-attributes-lastlogon-lastlogontimestamp-and-lastlogondate.aspx


    2、发现某一台PC“LastLogonDate”的时间是:2020/6/28  8:31:37

    距离当前的时间2020/7/7 13:57:30间隔这么远?何故?
    >>参见问题1的回复。


    3、“lastlogonTimestamp”这个字段,可以用上述脚本直接转换获得“上次登录时间”?
    >>参见问题1的回复。LastLogonDate就是LastLogontimestamp的转换版本。
    如果需要得到机器的LastLogon,我们还是需要在每一台DC上获得每一台机器的LastLogon,然后转换过来,那么最近的登录时间就是某台机器的上次登录时间(LastLogon)。


    此致,
    Daisy Zhou

    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

    4、看样子,需要到用户PC所在的站点的2台域控上导出“LastLogon

    =》如何在域控上批量导出所有的PCLastLogon”值,且导出转换后的结果,csv格式输出?

    -LastLogon:
                      当用户登录时,此属性在仅提供身份验证的域控制器上更新。因为它仅在一个DC上更新,所以这意味着该属性不会被复制。尽管起初看起来不方便,但这实际上是一个非常有用的功能。在那些情况下,当您可能想弄清楚用户已登录(或未登录)的网站时,可以使用此属性。
                      为此,您可以编写一个快速查询:
     

    $(foreach($ DC in(((get-addomaincontroller -filter * |排序名称).name))){$ user = get-aduser chris -properties lastlogon -server $ dc |选择名称,lastlogon;回显“ $ DC-$ (w32tm / ntte $ user.lastlogon)“})

    5、在当前站点的所有域控上导出LastLogon值,在比对哪台域控的LastLogon”值,最新表示最近登录时间?

    6、我们的诉求是:看下域环境内,PC上次登录域控的校验时间,是看LastLogon”值?

    LastLogon” 在什么情况下会更新?



    • 已编辑 super.ma 2020年7月8日 8:27 增加描述
    2020年7月8日 8:15
  • 尊敬的客户,您好!

    4、如何在域控上批量导出所有的PC“LastLogon”值,且导出转换后的结果,csv格式输出?

    >>您可以尝试以下的命令:
    Get-ADComputer -Filter * -Properties lastlogon | select -Property name,@{n="lastlogon";e={[datetime]::FromFileTime($_.lastlogon)}} | Export-CSV C:\file.csv

    在某一台域控制器上运行后的结果是这样子的:


    5、在当前站点的所有域控上导出“LastLogon”值,在比对哪台域控的“LastLogon”值,最新表示最近登录时间?

    >>如果当前站点的域控可以使用的情况下,在此站点里的客户端应该会找本站点的域控制器去验证。


    6、我们的诉求是:看下域环境内,PC上次登录域控的校验时间,是看“LastLogon”值?
    “LastLogon” 在什么情况下会更新?

    >>一般关机重启机器,或者直接重启机器,或者更新客户端和域控制器之间的secure channel,都会更新机器的LastLogon.即只要客户端联系域控制器的时候就会更新机器的LastLogon.

    请问PC上次登录域控的“校验时间”是什么呢?客户端联系域控制器的时间吗?如果是的话,我暂时想到的就是就是上面的三个情况。


    此致,
    Daisy Zhou

    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

    2020年7月10日 10:37
    版主
  • 尊敬的客户,您好!

    4、如何在域控上批量导出所有的PC“LastLogon”值,且导出转换后的结果,csv格式输出?

    >>您可以尝试以下的命令:
    Get-ADComputer -Filter * -Properties lastlogon | select -Property name,@{n="lastlogon";e={[datetime]::FromFileTime($_.lastlogon)}} | Export-CSV C:\file.csv

    在某一台域控制器上运行后的结果是这样子的:


    5、在当前站点的所有域控上导出“LastLogon”值,在比对哪台域控的“LastLogon”值,最新表示最近登录时间?

    >>如果当前站点的域控可以使用的情况下,在此站点里的客户端应该会找本站点的域控制器去验证。


    6、我们的诉求是:看下域环境内,PC上次登录域控的校验时间,是看“LastLogon”值?
    “LastLogon” 在什么情况下会更新?

    >>一般关机重启机器,或者直接重启机器,或者更新客户端和域控制器之间的secure channel,都会更新机器的LastLogon.即只要客户端联系域控制器的时候就会更新机器的LastLogon.

    请问PC上次登录域控的“校验时间”是什么呢?客户端联系域控制器的时间吗?如果是的话,我暂时想到的就是就是上面的三个情况。


    此致,
    Daisy Zhou

    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

    5、在当前站点的所有域控上导出“LastLogon”值,在比对哪台域控的“LastLogon”值,最新表示最近登录时间?
    >>如果当前站点的域控可以使用的情况下,在此站点里的客户端应该会找本站点的域控制器去验证。

    =》当前站点有2台域控,是不是分别导出,然后比对一下,那个“LastLogon”值 最新?就是当下的最新时间?

    发现某一台PC“LastLogonDate”的时间是:2020/6/28  8:31:37
    距离当前的时间2020/7/7 13:57:30间隔这么远?何故?
    >>参见问题1的回复。

    请问PC上次登录域控的“校验时间”是什么呢?客户端联系域控制器的时间吗?如果是的话,我暂时想到的就是就是上面的三个情况。

    =》查询PC 当前站点的最新登录时间,是不是如果笔记本,先开机后插网线,LastLogonDate”和“LastLogon” 均不更新?

    请问PC上次登录域控的“校验时间”是什么呢?客户端联系域控制器的时间吗?=》是,看下PC 和域控通讯的时间,看哪个字段?如何准确的查看,尤其多域控主机下



    • 已编辑 super.ma 2020年7月11日 3:39 增加描述
    2020年7月11日 3:28
  • 尊敬的客户,您好!

    感谢您的回复。

    =》当前站点有2台域控,是不是分别导出,然后比对一下,那个“LastLogon”值 最新?就是当下的最新时间?
    回答:是的。

    =》查询PC 当前站点的最新登录时间,是不是如果笔记本,先开机后插网线,“LastLogonDate”和“LastLogon” 均不更新?
    回答:根据我在测试环境中的测试,把网卡禁用以后,关机重启或者直接重启机器,然后登录,机器的LastLogon都是不更新的。

    =》请问PC上次登录域控的“校验时间”是什么呢?客户端联系域控制器的时间吗?=》是,看下PC 和域控通讯的时间,看哪个字段?如何准确的查看,尤其多域控主机下
    回答:我发现计算机更新计算机策略的时候也是需要联系DC的(即运行gpupdate /force或者组策略在后台更新的时候
    就是使用上面的命令看LastLogon这个属性。



    此致,
    Daisy Zhou

    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

    • 已标记为答案 super.ma 2020年7月22日 1:08
    2020年7月13日 4:40
    版主
  • 尊敬的客户,您好!

    请问这个问题是否已经解决?或者还需要我为您提供什么帮助吗?

    如果您对我的回复有任何疑问,欢迎您随时咨询我们。

    感谢您的理解和支持。


    此致,
    Daisy Zhou

    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

    2020年7月16日 7:10
    版主
  • 非常好,我收藏了!
    2020年7月16日 7:37
  • 尊敬的客户,您好!

    好几天没有收到您的回复了,请问这个问题是否已经解决?或者还需要我为您提供什么帮助吗?

    如果您对我的回复有任何疑问,欢迎您随时咨询我们。

    感谢您的理解和支持。

    祝您工作生活愉快!


    此致,
    Daisy Zhou

    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

    2020年7月20日 2:29
    版主