Get-ADUser使用msDS-cloudExtensionAttribute20过滤无结果问题求助
Get-ADUser属性匹配查询问题修复方案
错误原因
- 逻辑偏差:你原本的过滤逻辑是判断用户的
UserPrincipalName是否等于"msDS-cloudExtensionAttribute20"这串字符,不是判断UserPrincipalName是否和msDS-cloudExtensionAttribute20属性的存储值相等,完全不符合查询需求。 - 语法限制:
Get-ADUser的-Filter参数原生不支持在查询阶段直接对比同一用户对象的两个属性值,该筛选逻辑必须在拿到查询结果后通过Where-Object实现。 - 变量解析失效:过滤脚本块内用单引号包裹变量会导致变量不会被解析,直接被识别为纯字符串内容。
- 搜索路径格式错误:
SearchBase参数中嵌套双引号、填写空OU的写法会导致查询路径无效,需要替换为实际的组织单元和域路径,无需额外嵌套引号。
修复后的代码
# 定义需要查询的扩展属性名 $extensionAttr = "msDS-cloudExtensionAttribute20" # 先查询所有启用的用户,拉取所需全部属性 Get-ADUser -Filter {Enabled -eq $true} ` -SearchBase 'OU=实际OU1,OU=实际OU2,OU=实际OU3,DC=你的域名,DC=后缀' ` -Properties Name, PasswordNeverExpires, PasswordExpired, PasswordLastSet, EmailAddress, $extensionAttr, UserPrincipalName | # 后续过滤密码未过期、两个属性值相等的用户 Where-Object { $_.PasswordExpired -eq $false -and $_.UserPrincipalName -eq $_.$extensionAttr }
改动说明
- 把两个属性值匹配的逻辑移到了查询后的过滤阶段,适配AD查询的语法限制
SearchBase参数请替换为你实际的域组织单元路径,不要留空、不要加嵌套双引号- 所有需要用到的属性都提前在
-Properties参数中声明,避免后续过滤时属性缺失
内容的提问来源于stack exchange,提问作者Herry Huang
相关产品推荐
相关产品推荐

