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

使用DirectorySearcher的c#中的LDAP查询不会返回任何内容,c#,active-directory,ldap,C#,Active Directory,Ldap,我使用绑定到AD根目录的DirectorySearcher运行以下LDAP查询: (&(|(objectClass=container)(objectClass=organizationalUnit))(!(distinguishedName=OU=)(*&^%\\\#@$!\\\#$%^,OU=xyxy.yxyx,OU=yyyy,OU=tttt,DC=base,DC=local))) 但是,它不会返回任何OUs。当我对下面这样的其他OU运行相同的查询时,我会在AD中获得所有其

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

(&(|(objectClass=container)(objectClass=organizationalUnit))(!(distinguishedName=OU=)(*&^%\\\#@$!\\\#$%^,OU=xyxy.yxyx,OU=yyyy,OU=tttt,DC=base,DC=local)))
但是,它不会返回任何OUs。当我对下面这样的其他OU运行相同的查询时,我会在AD中获得所有其他OU:

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

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

我假设OU的名称是
)(*&^%\\\\\\\@$!\\\\\$%^
在active directory用户和计算机中显示。如果打开属性编辑器,您会发现DiscrimizedName属性的以下值:
OU=)(*&^%\\\\\\@$!\\\\\\$%^,OU=..
(注意,此处反斜杠的数量加倍,并添加了一个额外的反斜杠)

基于此,
*
,和
\
(以及其他)需要转义

  • *变成\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=...

我假设OU的名称是
)(*&^%\\\\\\@$!\\\\\\\$%^
,正如它在active directory用户和计算机中显示的那样。如果打开属性编辑器,您会发现DiscrimizedName属性的以下值:
OU=)(*&^%\\\\\\\\\\@$!\\\\\\\$^,OU=…
(请注意,此处反斜杠的数量增加了一倍,并添加了一个额外的反斜杠)

基于此,
*
,和
\
(以及其他)需要转义

  • *变成\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=...

要排除的OU的名称是什么?
*&^%\\\\@$!\\\\\\$%^,OU=xyxy.yxyx,OU=yyyy,OU=tttt,DC=base,DC=local
?我使用的OU的名称是:)(*&^%\\\\\\@$!\\\\\\$%^这是在OU tttt下的,它是在OU yyyy下的,整个东西都在domain base.local下。您要排除的OU的名称是什么?
*&^%\\\\\\\\\\\\$!\\\\\\$^,OU=xyxy.yxyx,OU=YYYYYYY,OU=tttt,DC=base,DC=local
?我使用的OU的名称是:)(*&^%\\\\\@$!\\\\\$%^这在OU tttt下,它在OU yyyy下,整个东西在domain base.local下。正如我在问题的评论中提到的,在Active Directory下显示的OU名称是)(*&^%\\\\\\\$!\\\\\$%^请参见属性编辑器下的内容:)(*&^%\\\\\\\\\\\\\\$!\\\\\\\\\\$^(对不起,我不知道如何在评论中开始一行)。是的,您是对的。查询的转发方式是错误的。但是我希望查询失败,并且我的DirectorySearcher会引发异常。相反,它返回了一个空结果。正如我在问题的注释中提到的,在Active Directory下显示的OU名称是)(*&^%\\\\\\\\\\\\$!\\\$^请参见属性编辑器下的此项:)(*&^%\\\\\\\@$!\\\\\\\\$%^(对不起,我不知道如何在注释中开始新行)。是的,你是对的。查询的前进方式是错误的。但我希望查询失败,我的DirectorySearcher抛出异常。相反,它返回了一个空结果。