2015-10-05 67 views
1

我跑使用的DirectorySearcher這勢必對AD的根目錄下面的LDAP查詢C#:LDAP查詢使用的DirectorySearcher不返回任何

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

但是,它不返回任何組織單位。當我運行與其他OU像下同查詢,我得到所有其他OU在AD:

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

基本上,我試圖運行所有的OU查詢其排除一些特定的OU。我想這與OU名稱中的特殊字符有關。

+0

什麼是你要排除的OU的名字嗎? '*&^%#\\\ @ $!\\\#$%^,OU = xyxy.yxyx,OU = YYYY,OU = TTTT,DC =基地,DC = local'? –

+0

我使用的OU的名稱是:)(*&^%\#@ $!\#$%^,這是在OU tttt下,在OU yyyy下,整個事物在域base.local下。 –

回答

0

我假設OU的名稱是)(*&^%\#@$!\#$%^,因爲它出現在Active Directory用戶和計算機中。如果打開屬性編輯器,您可以找到distinguishedName屬性的以下值:OU=)(*&^%\\\#@$!\\\#$%^,OU=....(請注意,此處反斜槓的數量增加了一倍,並且添加了一個額外的反斜槓)。在此基礎上MSDN page()*\(及其他)需要進行轉義

  • *成爲\ 2A

  • (變爲\ 28

  • )成爲\ 29

  • \變成\ 5C

所以你OU名稱LDAP過濾器應該變爲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=... 
+0

正如我在問題的評論中所提到的那樣,在Active Directory中出現的OU名稱是)(*&^%\#@ $!\#$%^請參閱屬性編輯器下的這個:)(*&^%\\ \#@ $!\\\#$%^(對不起,我不知道如何在評論中開始新行) –

+0

我已經更新了答案以匹配您的OU名稱 –

+0

是的您是對的。查詢前進的方式是錯誤的,但我期望查詢失敗,我的DirectorySearcher拋出一個異常,而是返回一個空的結果。 –