多条件查询AD用户脚本求助:查询启用且超365天未登录用户无结果
解决AD启用用户超过365天未登录的脚本问题
我来帮你排查下问题所在,你的脚本没返回结果主要有几个关键错误,咱们一步步修正:
问题分析
- 启用状态判断颠倒:你要找的是启用状态的用户,但原脚本里写的是
$_.Enabled -eq $False,这会筛选出已禁用的账户,和需求完全相反。 - LastLogonDate匹配逻辑错误:用
-eq去匹配(Get-Date).AddDays(-365),意味着你只找最后登录时间恰好等于一年前此刻的用户,这种情况几乎不可能存在,应该筛选最后登录时间早于或等于一年前的用户。 - 未处理从未登录的账户:有些启用的AD账户可能从未登录过,它们的
LastLogonDate值为$null,这部分用户也符合“超过365天未登录”的条件,需要纳入筛选。 - 遗漏属性调用:默认
Get-ADUser不会返回LastLogonDate属性,必须显式指定才能获取这个字段。
修正后的脚本
Get-ADUser -Filter * -Properties LastLogonDate | Where-Object { $_.Enabled -eq $True -and ($_.LastLogonDate -le (Get-Date).AddDays(-365) -or $_.LastLogonDate -eq $null) } | Select-Object Name, SamAccountName, Enabled, LastLogonDate
代码说明
-Properties LastLogonDate:显式指定获取LastLogonDate属性,这是原脚本遗漏的关键步骤。$_.Enabled -eq $True:确保只保留处于启用状态的账户。$_.LastLogonDate -le (Get-Date).AddDays(-365):筛选出最后登录时间在一年前及更早的用户;-or $_.LastLogonDate -eq $null补充从未登录过的启用账户,覆盖所有符合条件的场景。Select-Object:输出关键信息,让结果更清晰易读。
你可以直接运行这个修正后的脚本,应该就能得到符合需求的用户列表了。
内容的提问来源于stack exchange,提问作者Reece Alqotaibi
相关产品推荐
相关产品推荐

