2010-04-15 67 views
2

我在做搜索時遇到了困難,我相信在我的OU中有一個*字符。 OU組稱爲WorldWide Offices標題中帶有*的OU的LDAP查詢。怎麼樣?

我有一個循環查詢,返回給定組中的所有用戶。所以我輸入一個組名,這使我回到了一個組。然後我通過group.members循環。這些成員將成爲用戶或其他組。因此,如果不是用戶,我會再次循環查看它是否是一個組。該組的成員始終是DistinguishedName,這就是我必須要搜索的內容。

我在用的distinguishedName作爲 CN =史密斯\,約翰當前用戶,OU =筆記本電腦,OU =用戶,OU =倫敦DC,OU =英國,OU = 全球辦事處,DC = OurDomain,DC = LOCAL。

我做的DirectorySearcher和我的過濾器是

Searcher.Filter = "(&(&(objectClass=user)(!(objectClass=computers)))(distinguishedName=CN=Smith\, John a.,OU=Laptop,OU=Users,OU=London DC,OU=UK,OU=*Worldwide Offices*,DC=OurDomain,DC=LOCAL)) 

正如你所看到的,我認爲一個事實,即我們的OU已經*在它的標題就是爲什麼它沒有找到用戶的原因。任何其他沒有*的OU似乎都可以工作。這就是爲什麼我相信*是問題。

沒有人有任何想法如何從重命名OU繞過*問題,除了?

回答

2
Searcher.Filter = "(&(&(objectClass=user)(!(objectClass=computers)))(distinguishedName=CN=Smith\, John a.,OU=Laptop,OU=Users,OU=London DC,OU=UK,OU=\2aWorldwide Offices\2a,DC=OurDomain,DC=LOCAL)) 

一個*必須與\2a轉義 - 請MSDN "Search Filter Syntax"

如果以下任何特殊 字符必須出現在搜索 過濾器作爲文字,它們必須 取代列出的轉義 序列。

* => \2a 
(=> \28 
) => \29 
\ => \5c 
NUL => \00 
/=> \2f 

只需用\逃脫它應該工作太:

Searcher.Filter = "(&(&(objectClass=user)(!(objectClass=computers)))(distinguishedName=CN=Smith\, John a.,OU=Laptop,OU=Users,OU=London DC,OU=UK,OU=\*Worldwide Offices\*,DC=OurDomain,DC=LOCAL)) 
2

如果屬性類型是一些字符串類型的外卡才能正常工作。 (八位字符串,unicode字符串)。如果你使用* agains像給定名稱的屬性,顯示名則通配符會受到尊重。但是,專有名稱的類型是「專有名稱」,因此子字符串匹配不會被服務器啓用。

如果使用*對objectcategory,DN的distinguishedName ......你可以看到通配符不工作。

你的邏輯需要改變。