使用DirectorySearcher在c#中的LDAP查询不返回任何内容

时间:2015-10-05 08:33:39

标签: c# active-directory ldap

我使用DirectorySearcher运行以下LDAP查询,该查询绑定到AD的根目录:

(&(|(objectClass=container)(objectClass=organizationalUnit))(!(distinguishedName=OU=)(*&^%\\\#@$!\\\#$%^,OU=xyxy.yxyx,OU=yyyy,OU=tttt,DC=base,DC=local)))

但是,它不会返回任何OU。当我与下面的其他OU运行相同的查询时,我得到AD中的所有其他OU:

(&(|(objectClass=container)(objectClass=organizationalUnit))(!(distinguishedName=OU=SOMEOU,OU=xyxy.yxyx,OU=yyyy,OU=tttt,DC=base,DC=local)))

基本上,我正在尝试对排除某些特定OU的所有OU运行查询。我想这与OU名称中的特殊字符有关。

1 个答案:

答案 0 :(得分:0)

我假设OU的名称是)(*&^%\#@$!\#$%^,因为它出现在活动目录用户和计算机中。如果打开属性编辑器,则会为distinguishedName属性找到以下值:OU=)(*&^%\\\#@$!\\\#$%^,OU=....(请注意,此处反斜杠的数量加倍,并添加了额外的反斜杠。)

根据此MSDN page()*\(和其他人)需要转义。

  • *成为\ 2a

  • (成为\ 28

  • )成为\ 29

  • \成为\ 5c

因此,LDAP过滤器中的OU名称应为OU=\29\28\2a&^%\5c\5c\5c#@$!\5c\5c\5c#$%^,OU=....

请注意,您需要在此处转义\个字符或在C#中使用@来创建这样的逐字字符串:

string dn = @"OU=\29\28\2a&^%\5c\5c\5c#@$!\5c\5c\5c#$%^,OU=...