PowerShell查询AD用户ExtensionAttribute1日期计算错误求助
解决AD用户extensionAttribute1日期筛选不准确的问题
问题根源
你当前的错误是把日期转换成dd-MM-yyyy格式的字符串进行比较,这种字符串的比较是按字符顺序而非日期逻辑。比如"30-09-2022"字符串比"27-08-2022"大,但实际这个日期是在90天范围内的,不该被筛选出来,导致结果包含不符合要求的用户。
修正方案
不要将基准日期转为字符串,保持DateTime类型,同时把用户的extensionAttribute1字符串转为DateTime后再做日期比较:
# 获取90天前的日期,保持DateTime类型 $90DaysAgo = (Get-Date).AddDays(-90) # 查询所有启用且有extensionAttribute1的AD用户,再过滤日期符合条件的 Get-ADUser -Properties ExtensionAttribute1 -Filter { Enabled -eq $true -and ExtensionAttribute1 -like "*" } | Where-Object { # 尝试将extensionAttribute1转换为指定格式的DateTime $attrDate = $null if ([DateTime]::TryParseExact($_.ExtensionAttribute1, "dd-MM-yyyy", $null, [System.Globalization.DateTimeStyles]::None, [ref]$attrDate)) { # 筛选出extensionAttribute1日期早于90天前的用户 $attrDate -lt $90DaysAgo } else { # 转换失败的用户直接跳过(可根据需求调整处理逻辑) $false } }
说明
- 保持
$90DaysAgo为DateTime类型,确保日期比较的逻辑正确性 - 使用
TryParseExact安全转换extensionAttribute1的字符串日期,避免格式错误导致脚本报错 - 先通过AD Filter获取启用且有
extensionAttribute1的用户,再在客户端过滤日期,因为AD原生Filter无法直接处理字符串转日期的操作
内容的提问来源于stack exchange,提问作者Bla Bla
相关产品推荐
相关产品推荐

