Tant que vous êtes sur .NET 2.0, c'est probablement aussi bon que possible. Ce que vous pouvez faire est d'ajouter les critères de « service » à votre filtre de recherche - de cette façon, vous laisserais jusqu'à AD pour faire le filtrage par département:
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
Cela aide certainement - je l'espère, en tant que Programmeur C#, je n'ai pas bousillé votre code VB! Le filtre LDAP vous permet essentiellement d'avoir un certain nombre de conditions à l'intérieur d'un support "anded" (le (&....)
autour de vos deux conditions - vous pouvez facilement l'étendre à trois conditions comme je l'ai fait). Si vous avez une chance de passer à .NET 3.5, il y a un nouvel espace de noms appelé System.DirectoryServices.AccountManagement
disponible, qui offre des approches bien meilleures et plus «intuitives» pour gérer les utilisateurs, les groupes, les ordinateurs et la recherche.
Consultez l'article MSDN Managing Directory Security Principals in the .NET Framework 3.5 pour en savoir plus à ce sujet.
Ce que vous pouvez faire est par ex. « Recherche par exemple », de sorte que vous pouvez créer un UserPrincipal
et définir les propriétés que vous souhaitez filtrer, puis faire une recherche par cet objet comme un « modèle » presque:
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
assez agréable en effet! Mais seulement sur .NET 3.5, malheureusement .... mais attendez - c'est juste un service pack sur .NET 2, vraiment :-)
Cela fonctionne comme un charme, marc_s. Très appréciée! Croyez-moi, il y a * plusieurs * fonctionnalités de .NET 3.5 dont je voudrais profiter (c'est l'une d'entre elles). J'apprécie la solution améliorée et le conseil rapide sur DirectoryServices. :) –