我想搜索用户并通过他们的专有名称模式来获取他们。我的对象结构是:
{"dn": "CN=Manager,OU=PH,OU=xxx HQ xxx,DC=xxx,DC=xxx",
"userPrincipalName": "user1@domain.com",
"sAMAccountName": "User1",
"whenCreated": "20190517064007.0Z",
"pwdLastSet": "0",
"userAccountControl": "512",
"sn": "User1",
"givenName": "User1",
"cn": "User1",
"displayName": "User nickname",
"groups": []}
我使用了此软件包-https://www.npmjs.com/package/activedirectory#findUsers。
函数:findUsers。
预期结果:找到所有拥有
“ CN =经理”
在其“ dn”中。
我已经尝试了其中一些查询:
dn=*CN=${managerName}*`
{dn:{filter:'*CN=${managerName}*'}}
{filter:'*CN=${managerName}*'}
{filter:{dn: '*CN=${managerName}*'}}
每次ldap返回带有空数组或指示查询错误
答案 0 :(得分:0)
请注意,dn
实际上不是Active Directory中的属性。我认为您是在distinguishedName
之后。
但是您不能在任何接受distinguishedName
的属性中使用通配符。其中包括distinguishedName
,member
,manager
和其他几个。
虽然您似乎只想按帐户名进行搜索。您可以按cn
属性进行搜索,如下所示:
(&(objectClass=user)(cn=*Manager*))
这将找到名称中带有Manager
的任何用户帐户。请注意这一点。如果您在一开始使用通配符,则它不能使用索引进行搜索。因此,在我刚刚给您的查询中,它必须通过每个用户帐户进行搜索以找到匹配项。因此,您可以提供的标准越多越好。
Active Directory还具有一种特殊的搜索,称为Ambiguous Name Resolution,该搜索专门用于查找不知道全名的用户。它会在几个属性中搜索您的搜索字词,例如名字和姓氏,以及其他。例如,您可以像这样进行搜索:
(anr=Michał Bednarz)
即使您帐户上的displayName
是Bednarz, Michał
,它也会找到您。
您还可以在此处阅读有关LDAP查询格式的信息:Active Directory: LDAP Syntax Filters