Пока вы используете .NET 2.0, это, вероятно, так же хорошо, как и получается. Что вы можете сделать, это добавить критерии «отдела» в свой поисковый фильтр - таким образом, вы оставите для AD возможность выполнять фильтрацию по отделам:
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 Управление принципами безопасности каталогов в .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, действительно: -)