如何用Search-ADAccount查找近12个月曾活跃的过期AD用户
解决方法:筛选近12个月活跃的过期AD用户
你遇到的问题核心是**Search-ADAccount确实没有-Filter参数**,没法直接在这个命令里叠加活跃条件。下面给你两种可行的实现方式:
方法1:先用Search-ADAccount获取过期用户,再筛选活跃记录
先拉取所有过期用户,再通过Where-Object过滤出近12个月内有登录行为(或属性变更)的用户:
# 动态计算12个月前的日期 $12MonthsAgo = (Get-Date).AddMonths(-12) $Filename = "BJL Expired Users.csv" Search-ADAccount -UsersOnly -AccountExpired –ResultSetSize $null | Where-Object { $_.LastLogonDate -ge $12MonthsAgo } | # 用登录日期判断活跃,更精准 Select-Object Name, SamAccountName, DistinguishedName, mail, lastlogondate,Enabled,lockedOut,whenChanged,AccountExpirationDate,UserAccountControl,whenCreated | Export-CSV -path "$ExportPath$Filename" –NoTypeInformation | Out-GridView -title "Expired Accounts (Active in Last 12 Months)"
补充说明:
- 优先用
LastLogonDate:这个属性是AD同步到全局编录的真实最近登录时间,比WhenChanged可靠(WhenChanged可能因修改用户其他属性触发,不一定是登录) - 若需用
WhenChanged判断,把Where-Object条件替换为$_.whenChanged -ge $12MonthsAgo即可
方法2:直接用Get-ADUser一次性过滤(更高效)
Get-ADUser支持-Filter参数,可以直接组合过期和活跃两个条件,避免先拉取全量过期用户再筛选,效率更高:
$12MonthsAgo = (Get-Date).AddMonths(-12) $Filename = "BJL Expired Users.csv" Get-ADUser -Filter { AccountExpirationDate -lt (Get-Date) -and AccountExpirationDate -ne $null -and LastLogonDate -ge $12MonthsAgo } –ResultSetSize $null -Properties mail, lastlogondate, whenChanged, AccountExpirationDate, UserAccountControl | Select-Object Name, SamAccountName, DistinguishedName, mail, lastlogondate,Enabled,lockedOut,whenChanged,AccountExpirationDate,UserAccountControl,whenCreated | Export-CSV -path "$ExportPath$Filename" –NoTypeInformation | Out-GridView -title "Expired Accounts (Active in Last 12 Months)"
补充说明:
AccountExpirationDate -lt (Get-Date):筛选已过期的用户AccountExpirationDate -ne $null:排除未设置过期日期的用户-Properties必须指定需要的扩展属性,因为Get-ADUser默认只返回基础属性
内容的提问来源于stack exchange,提问作者Ian W
相关产品推荐
相关产品推荐

