我試圖通過LDAP查詢ActiveDirectory中,但是查詢可能會包含空格或其他字符可能導致問題的(連字符?)查詢Active Directory包含LDAP過濾器空間
(&(objectCategory=person)(objectClass=user)(|(&(sn=Bloggs*)(givenName=Jo*))(displayName=Jo Bloggs))
這是一個OR搜索例如在SQL這將是WHERE (sn LIKE 'Bloggs%' AND givenName LIKE 'Jo%') OR displayName = 'Jo Bloggs'
然而,當我嘗試LDAP查詢,我得到一個錯誤:System.ArgumentException: The (&(objectCategory=person)(objectClass=user)(|(&(sn=Bloggs*)(givenName=Jo*))(displayName=Jo Bloggs)) search filter is invalid
代碼進行搜索:
string userName = "Jo Bloggs";
DirectoryEntry adroot = new DirectoryEntry("LDAP://" + Environment.UserDomainName, "user", "password", AuthenticationTypes.Secure);
DirectorySearcher search = new DirectorySearcher(adroot);
search.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(|(&(sn={0}*)(givenName={1}*))(displayName={2}))", userName.Split(' ')[1], userName.Split(' ')[0], userName);
這僅僅是一個基本的搜索,我會喜歡搜索其他欄目(職位,電話,部門等),例如WHERE title LIKE '%foo%' OR telephonenumber LIKE '%foo% OR department LIKE '%foo%'
另外,我可以緩存搜索,所以ActiveDirectory不會從搜索同一事物的人那裏得到很多點擊嗎?
這也只能找到一個條目,我想搜索並顯示在中繼器中找到的所有結果。
現在接受更多我以前的問題的答案。然而,還有一些沒有回答的問題(或者沒有答案(例如不能完成,系統限制),或者答案沒有完全回答這個問題) – SamWM