lastLogonTimeStamp 属性的 1601/01/01

End*_*der 6 windows powershell ldap active-directory

我正在使用 lastLogonTimeStamp 跟踪用户上次登录时间,如下代码所示:

$Domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
$ADSearch = New-Object System.DirectoryServices.DirectorySearcher
$ADSearch.SearchRoot ="LDAP://$Domain"
$ADSearch.SearchScope = "subtree"
$ADSearch.PageSize = 100
$ADSearch.Filter = "(objectClass=user)"

$properies = @("distinguishedName",
"sAMAccountName",
"mail",
"lastLogonTimeStamp")

foreach ($pro in $properies) {
    $ADSearch.PropertiesToLoad.add($pro)   
}

$userObjects = $ADSearch.FindAll()
foreach ($user  in $userObjects) {
    $logon = $user.Properties.Item("lastLogonTimeStamp")[0]
    $lastLogon = [datetime]::fromfiletime($logon)        
    $lastLogon= $lastLogon.ToString("yyyy/MM/dd")
    $lastLogon
}
Run Code Online (Sandbox Code Playgroud)

我到目前为止:

1601/01/01
1601/01/01
3/12/2012
1601/01/01
3/19/2015
Run Code Online (Sandbox Code Playgroud)

这不是我第一次对1601/01/01值感到非常困惑。而且我还阅读了有关此值的 MS 文档,对我来说这是无稽之谈,它没有太多描述它的目的。不仅lastLogonTimeStamp有这个输出,许多其他属性也返回了这个。所以我的问题是:

  1. 这个值的目的是什么?
  2. 在这种情况下,我应该返回什么作为适当的人类可读输出?(此属性对该用户无效?)

小智 6

“上次登录时间戳”和 Windows 2016 域控制器存在一个已知错误。

LDAP 简单绑定不会像以前的操作系统 ( 2012, 2008 ) 那样更新上次登录时间戳。当心。

我在这方面花了 2 个月的时间与 MS。最终会发布一个补丁……但目前还没有修复。