如何通过ldapsearch或PowerShell使用attributeID(urn:oid)查询AD
通过URN:OID格式属性标识查询Active Directory的实现方法
Active Directory原生兼容LDAP标准的OID属性引用格式,无需提前将urn:oid:2.5.4.42这类标识映射为givenName类友好名称即可直接查询,以下是两种常用工具的操作方式:
ldapsearch 操作方法
ldapsearch(OpenLDAP官方查询工具)可直接识别带urn:oid:前缀的属性标识,无需额外配置参数,直接将OID格式标识放在查询属性列表、过滤条件中即可。
基础查询示例
查询基准DN下所有用户对象,返回givenName(对应OID 2.5.4.42)、sn(对应OID 2.5.4.4)两个属性:
ldapsearch -x -h <AD域控IP/域名> -D "<绑定账号的完整DN>" -w "<绑定账号密码>" -b "<查询基准DN>" "(objectClass=user)" urn:oid:2.5.4.42 urn:oid:2.5.4.4
过滤条件中使用OID
如果需要在查询过滤规则中直接通过OID匹配属性值,直接将OID标识写入过滤表达式即可,例如查询givenName为「张三」的用户:
ldapsearch -x -h dc01.corp.com -D "cn=administrator,cn=users,dc=corp,dc=com" -w "yourpassword" -b "dc=corp,dc=com" "(urn:oid:2.5.4.42=张三)" urn:oid:2.5.4.42
补充:如果希望返回结果中所有属性默认以OID格式显示而非友好名称,可以添加
-O oid启动参数。
PowerShell 操作方法
PowerShell无论是使用官方ActiveDirectory模块,还是原生.NET的DirectorySearcher类,都原生支持OID格式的属性标识。
方式1:使用ActiveDirectory模块(需提前安装RSAT AD组件)
直接将OID格式标识传入-Properties参数、写入过滤条件即可,返回结果的属性名与你传入的OID字符串完全一致,调用时需要完整引用:
# 导入AD模块 Import-Module ActiveDirectory # 查询所有用户,返回指定OID对应的属性 Get-ADUser -Filter * -Properties "urn:oid:2.5.4.42","urn:oid:2.5.4.4" | Select-Object Name,"urn:oid:2.5.4.42","urn:oid:2.5.4.4" # 过滤条件中使用OID,查询givenName为张三的用户 Get-ADUser -Filter "urn:oid:2.5.4.42 -eq '张三'" -Properties "urn:oid:2.5.4.42"
方式2:使用原生DirectorySearcher(无需安装额外模块)
如果环境没有安装AD管理模块,可以直接调用.NET的System.DirectoryServices类实现查询,将OID标识加入PropertiesToLoad属性集合即可:
# 初始化查询对象 $searcher = New-Object System.DirectoryServices.DirectorySearcher $searcher.SearchRoot = New-Object System.DirectoryServices.DirectoryEntry("LDAP://<查询基准DN>") $searcher.Filter = "(objectClass=user)" # 加载需要返回的OID格式属性 $searcher.PropertiesToLoad.Add("urn:oid:2.5.4.42") | Out-Null $searcher.PropertiesToLoad.Add("urn:oid:2.5.4.4") | Out-Null # 执行查询并遍历结果 $results = $searcher.FindAll() foreach($entry in $results){ Write-Host "对象名:$($entry.Properties['name'][0])" Write-Host "givenName(urn:oid:2.5.4.42):$($entry.Properties['urn:oid:2.5.4.42'][0])" Write-Host "sn(urn:oid:2.5.4.4):$($entry.Properties['urn:oid:2.5.4.4'][0])" }
注意事项
- 必须保留
urn:oid:前缀,仅写数字OID在部分旧版本工具/AD环境中可能出现识别失败问题,带前缀的写法完全符合LDAP RFC标准,兼容性最好。 - 所有可通过友好名查询的AD属性,都可以通过其对应的schema OID用上述方式查询,不存在权限或功能差异。
内容的提问来源于stack exchange,提问作者wibbleman
相关产品推荐
相关产品推荐

