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

如何用PowerShell的LDAP筛选器查找近12个月的活跃AD用户

问题分析与修正方案

你的核心问题是LDAP筛选器中使用了PowerShell计算属性而非AD原生LDAP属性,导致语法无效。以下是具体修正步骤和完整脚本:

关键错误点

  • LastLogonDate是Get-ADUser返回的计算属性,并非AD存储的原生LDAP属性,LDAP筛选器无法直接识别它,需替换为AD原生属性lastLogonTimestamp(支持跨域控制器同步,适合全域查询)或lastLogon(仅存储在用户最近登录的DC,不建议全域使用)。
  • 可选但推荐:活跃用户通常是启用状态,建议在筛选器中补充排除禁用用户的条件。

修正后的完整脚本

# 计算1年前的UTC时间,转换为LDAP要求的格式
$oneYearAgoUtc = [datetime]::UtcNow.AddYears(-1)
$ldapDateFormat = $oneYearAgoUtc.ToString("yyyyMMddHHmmss.0Z")

# 构建正确的LDAP筛选器
$filter = @"
(&
    # 近12个月内有属性修改记录
    (whenChanged>=$ldapDateFormat)
    # 近12个月内有登录记录(使用跨DC同步的lastLogonTimestamp)
    (lastLogonTimestamp>=$ldapDateFormat)
    # 筛选启用状态的用户(排除禁用标记)
    (!userAccountControl:1.2.840.113556.1.4.803:=2)
)
"@

# 定义需要获取的用户属性
$properties = @(
    'displayName', 'title', 'department', 'DistinguishedName',
    'mail', 'lastLogonDate', 'Enabled', 'lockedOut', 'whenChanged',
    'AccountExpirationDate', 'UserAccountControl', 'sAMAccountType', 'whenCreated'
)

$Filename = "BJL Active Users.csv"
# 执行AD查询,lastLogonDate会由PowerShell自动从lastLogonTimestamp转换为DateTime格式
$result = Get-ADUser -LDAPFilter $filter -Properties $properties |
    Select-Object $properties

# 导出结果
$result | Export-Csv -Path "$ExportPath$Filename" -NoTypeInformation
$result | Out-GridView -Title 'Active Accounts'

额外说明

  1. 关于lastLogonTimestamp:该属性会在域控制器间同步,误差不超过14天(AD默认同步间隔),足以满足大部分全域活跃用户查询需求;若需要精确到秒的登录时间,需遍历所有域控制器查询lastLogon属性并合并结果,但这种场景极少。
  2. 权限要求:确保执行脚本的账号拥有AD用户属性的读取权限,否则会出现查询结果不全或报错的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:11:31