如何使用PowerShell查询指定周期内的活跃AD域用户
AD用户8个月活跃周期筛选统计方案
实现逻辑说明
要实现持续活跃满8个月的启用AD用户筛选、按父容器分组统计,核心是补充用户活跃时间属性的筛选逻辑:
- 常规AD批量统计场景下,使用
LastLogonDate属性判定用户活跃状态,该属性为域内复制的用户最近登录时间,满足绝大多数统计精度要求 - 8个月活跃阈值通过当前时间倒推8个月计算,筛选最后登录时间不早于该阈值、且有过登录记录的启用账号,即为持续活跃满8个月的用户
- 完全保留原有代码的父容器提取、分组统计、文件导出逻辑,不改变原有统计口径
完整可运行代码
# 配置参数:活跃周期为8个月,结果输出路径 $activeMonthThreshold = 8 $outputPath = "C:\Users2.txt" $thresholdDate = (Get-Date).AddMonths(-$activeMonthThreshold) Get-ADUser -Filter 'Enabled -eq $true' -Properties CN, LastLogonDate, DistinguishedName | # 筛选符合活跃要求的用户:有登录记录,且最后登录时间在8个月周期内 Where-Object { $_.LastLogonDate -and $_.LastLogonDate -ge $thresholdDate } | # 提取用户所在父容器的可分辨名称 Select-Object @{ Label = 'ParentContainer' Expression = { $_.DistinguishedName -replace "CN=$($_.CN)," } } | # 按父容器分组统计用户数 Group-Object -Property ParentContainer | Select-Object Name, Count | # 导出结果到指定文件 Out-File -FilePath $outputPath
可选调整说明
- 如果你对登录时间精度要求极高,需要遍历域内所有域控制器查询每个用户的
lastLogon属性取最大值,避免单DC复制延迟导致的统计误差,适合审计类严格场景使用 - 如果你定义的“持续活跃满8个月”是指账号创建时长满8个月且处于启用状态,只需要将加载属性替换为
whenCreated,筛选条件改为$_.whenCreated -le $thresholdDate即可 - 可直接修改
$activeMonthThreshold参数调整需要统计的活跃周期月数,不需要修改其他逻辑
内容的提问来源于stack exchange,提问作者David Jončić
相关产品推荐
相关产品推荐

