Пока вы работаете на .NET 2.0, это, вероятно, так хорошо, как и получается. Что вы можете сделать, это добавить «универмаги» критерии для поискового фильтра - таким образом, вы бы оставить его до нашей эры, чтобы сделать фильтрацию по отделам:
Private Sub GetUsersByDepartment(ByVal department as String)
Dim deGlobal As DirectoryEntry = New DirectoryEntry(ADPath, ADUser, ADPassword)
Dim ds As DirectorySearcher = New DirectorySearcher(deGlobal)
ds.Filter = "(&(objectCategory=person)(objectClass=user)(department=" & department & "))"
ds.SearchScope = SearchScope.Subtree
For Each sr As SearchResult In ds.FindAll
Dim newDE As DirectoryEntry = New DirectoryEntry(sr.Path)
If Not newDE Is Nothing Then
*Do Something*
End If
Next
End Sub
Это, безусловно, поможет - я надеюсь, что, как C#, я не испортил ваш код VB!
Фильтр LDAP в основном позволяет вам иметь любое количество условий внутри «андерного» кронштейна ((&....)
вокруг ваших двух условий - вы можете легко расширить это до трех условий, как и я).
Если у вас есть возможность переместиться на .NET 3.5, есть новое пространство имен под названием System.DirectoryServices.AccountManagement
, которое предлагает гораздо лучшие и более «интуитивные» подходы для обработки пользователей, групп, компьютеров и поиска.
Ознакомьтесь с статьей MSDN Managing Directory Security Principals in the .NET Framework 3.5, чтобы узнать больше об этом.
Что вы можете сделать, например, «Поиск по примеру», так что вы можете создать UserPrincipal
и установить те свойства, которые вы хотите фильтровать, а затем выполнить поиск по этому объекту в качестве «шаблона» почти:
UserPrincipal user = new UserPrincipal(adPrincipalContext);
user.Department = "Sales";
PrincipalSearcher pS = new PrincipalSearcher(user);
PrincipalSearchResult<Principal> results = pS.FindAll();
// now you could iterate over the search results and do whatever you need to do
Очень аккуратный, действительно! Но только на .NET 3.5, к сожалению .... но подождите - это всего лишь пакет обновления поверх .NET 2, действительно :-)
Это работает как шарм, marc_s. Очень признателен! Поверьте мне, есть * несколько * особенностей .NET 3.5. Я бы хотел воспользоваться (это один из них). Я ценю улучшенное решение и быстрый совет по DirectoryServices. :) –