PowerShell用whenCreated过滤Get-ADUser为何返回指定AD组外用户
问题根因
- 异常是
Get-ADUser的参数绑定规则导致的:当你显式传入-Filter参数时,该cmdlet会直接忽略管道输入的成员标识,全域执行过滤逻辑,因此返回了所有符合创建时间要求的域用户,而非仅筛选目标组内的成员。
修复后的代码
直接将过滤逻辑后置,用Where-Object针对组内返回的用户做二次筛选即可,同时优化了属性拉取逻辑,避免拉取无用的全量属性提升执行效率:
Get-ADGroupMember -Identity $groupname | Get-ADUser -Properties whenCreated,UserPrincipalName -ErrorAction Ignore | Where-Object { $_.whenCreated -ge $when } | Select-Object @{N='UserName';E={$_.UserPrincipalName}} | Export-Csv $filename -NoTypeInformation
补充说明
- 如果目标AD组的成员规模极大(上万级别),也可以先构造包含组内用户DN的过滤语句传递给
Get-ADUser,进一步降低域控制器查询压力,日常使用上述代码已经足够满足需求。
内容的提问来源于stack exchange,提问作者Justin V
相关产品推荐
相关产品推荐

