You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell查询AD用户时LastLogon日期一致且LastLogonTimestamp无结果

AD用户登录属性查询问题解决

问题原因

  • LastLogon显示相同日期:LastLogon是域内非复制属性,仅记录用户在当前查询的域控制器(DC)上的登录时间。如果多数用户没在这台DC登录过,该属性会返回默认初始值(比如1601年1月1日),导致所有用户显示同一日期。
  • LastLogonTimestamp无结果:这个属性是可复制的,但如果用户从未登录过域,或者登录后还没触发AD复制周期,属性值为空。直接对空值执行FromFileTime转换会导致无结果甚至报错。

修正后的查询命令

# 获取域内所有域控制器
$domainControllers = Get-ADDomainController -Filter * | Select-Object -ExpandProperty Name

# 遍历每台DC收集用户登录数据
$allUserLogons = foreach ($dc in $domainControllers) {
    Get-AdUser -Filter * -Properties DisplayName, LastLogon, LastLogonTimestamp -Server $dc |
        Select-Object DisplayName,
            @{Name='LastLogon'; Expression={if ($_.LastLogon -ne 0) {[DateTime]::FromFileTime($_.LastLogon)} else {$null}}},
            LastLogonDate,
            @{Name='LastLogonTimestamp'; Expression={if ($_.LastLogonTimestamp -ne 0) {[DateTime]::FromFileTime($_.LastLogonTimestamp).ToString('d MMMM')} else {$null}}}
}

# 按用户分组,保留每个用户最新的LastLogon记录
$allUserLogons | Group-Object DisplayName | ForEach-Object {
    $_.Group | Sort-Object LastLogon -Descending | Select-Object -First 1
}

关键说明

  • 遍历所有DC:确保收集到用户在任意一台服务器上的登录记录,避免遗漏真实登录时间
  • 空值判断:过滤掉未登录用户的0值属性,避免显示错误的初始日期
  • 取最大值:同一用户在多台DC的登录记录中,保留最新的那条,得到真实最后登录时间

内容的提问来源于stack exchange,提问作者Bob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:35:02