Lister les membres d un groupe active directory [Résolu]

loseyes 3 Messages postés lundi 30 août 2004Date d'inscription 24 septembre 2004 Dernière intervention - 21 sept. 2004 à 15:35 - Dernière réponse : infoWeb31 4 Messages postés mercredi 9 avril 2014Date d'inscription 2 juin 2014 Dernière intervention
- 11 avril 2014 à 11:37
bonjour,

je travaille actuellement sur une application en c# s'appuyant sur l'active directory. Je parviens sans aucun probleme à lister les utilisateurs present dans l'active directory. de la meme maniere j'obtiens la liste des groupes, mais pour des raisons de securité je souhaiterais savoir quel utilisateur fait partie de quel groupe.

si vous avez des idees sur la procedure a suivre (ou des exemples) je suis preneur

merci d'avance
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Frederyck 63 Messages postés vendredi 6 décembre 2002Date d'inscription 16 janvier 2009 Dernière intervention - 21 sept. 2004 à 15:49
1
Merci
Lorsque tu parcours les utilisateurs, faut que tu récupères la propriété memberof qui contient une collection des groupes auxquels l'utilisateur appartient.

Voici pour illuster un petit exemple:

DirectoryEntry entry = new DirectoryEntry("LDAP://" + conf.DomainController);
entry.Username = conf.Utilisateur;
entry.Password = conf.Password;

DirectorySearcher mySearcher = new DirectorySearcher(entry);
// On informe notre objet des propriétés de l'active directory dont on a besoin.
mySearcher.PropertiesToLoad.Add("cn");
mySearcher.PropertiesToLoad.Add("givenname");
mySearcher.PropertiesToLoad.Add("sn");
mySearcher.PropertiesToLoad.Add("memberof"); <-- liste des groupes auxquels l'utilisateur appartient

// On filtre la recherche sur l'utilisateur qui se présente.
mySearcher.Filter = "(&(anr="+user_login+")(objectCategory=person))";

SearchResultCollection results;
try
{
// Lancement de la recherche...
results = mySearcher.FindAll();
if(results.Count > 0)
{
// Si l'utilisateur a été trouvé dans la base, on charge ses propriétés
SearchResult result = results[0];
if(result.Properties["cn"] != null)
this._login = result.Properties["cn"][0].ToString();

if(result.Properties["givenname"] != null)
this._nom = result.Properties["givenname"][0].ToString();

if(result.Properties["sn"] != null)
this._prenom = result.Properties["sn"][0].ToString();

if(result.Properties["memberof"] != null)
this._memberOf = result.Properties["memberof"]; <-- récupération de la collection de groupe. Le type de la collection retournée est "ResultPropertyValueCollection". Il te suffira ensuite de l'énumérer pour la mettre dans une arrayList ou un tableau
}
}
catch
{
// On intercepte principalement ici l'exception pouvant être levée si
// notre objet 'mySearcher' à été mal initialisé suite à une contrôleur de domaine
// introuvable.
}

J'espère avoir répondu à ta question ;)
Frederyck

Merci Frederyck 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de Frederyck
loseyes 3 Messages postés lundi 30 août 2004Date d'inscription 24 septembre 2004 Dernière intervention - 24 sept. 2004 à 10:48
0
Merci
merci je vais essayer
je te tiens au courant
Commenter la réponse de loseyes
loseyes 3 Messages postés lundi 30 août 2004Date d'inscription 24 septembre 2004 Dernière intervention - 24 sept. 2004 à 12:07
0
Merci
ça marche parfaitement.
un grand merci pour tout.
Commenter la réponse de loseyes
Frederyck 63 Messages postés vendredi 6 décembre 2002Date d'inscription 16 janvier 2009 Dernière intervention - 24 sept. 2004 à 12:10
0
Merci
Content d'avoir pu t'aider ;)

Frederyck
Commenter la réponse de Frederyck
jplucien 5 Messages postés mardi 21 janvier 2003Date d'inscription 4 octobre 2004 Dernière intervention - 4 oct. 2004 à 23:25
0
Merci
Je recherche un code qui me permettrait de lister les utilisateurs d'un groupe de l'active directory afin de les ajouter à une liste.
(Si c'était possible en VB.NET car je ne connais pas C#)
J'arrive à lister dans une dropdownlist les groupes, l'idée serait que lorqu'un groupe est sélectionné, les utilisateurs viendraient peupler une nouvelle dropdownlist. Mon problème se résume donc à lister les users d'un groupe pour faire plus simple.

Merci de votre aide

Cordialement
Commenter la réponse de jplucien
jplucien 5 Messages postés mardi 21 janvier 2003Date d'inscription 4 octobre 2004 Dernière intervention - 4 oct. 2004 à 23:26
0
Merci
Je recherche un code qui me permettrait de lister les utilisateurs d'un groupe de l'active directory afin de les ajouter à une liste.
(Si c'était possible en VB.NET car je ne connais pas C#)
J'arrive à lister dans une dropdownlist les groupes, l'idée serait que lorqu'un groupe est sélectionné, les utilisateurs viendraient peupler une nouvelle dropdownlist. Mon problème se résume donc à lister les users d'un groupe pour faire plus simple.

Merci de votre aide

Cordialement
Commenter la réponse de jplucien
Frederyck 63 Messages postés vendredi 6 décembre 2002Date d'inscription 16 janvier 2009 Dernière intervention - 5 oct. 2004 à 12:58
0
Merci
Si j'ai bien compris tu souhaites lister dans une première dropdownlist les groupes ActiveDirectory puis en fonction du groupe sélectionné afficher les utilisateurs dans une autre liste qui appartiennent à se groupe.
Je te propose une solution (écrite n C#, mais tu n'auras pas trop de mal à traduire en VB, l'esprit reste le même)

Donc g une méthode qui se charge de récupérer tous les groupes ACtiveDirectory ayant des membres

private ArrayList getADGroupes()
{
   ArrayList members = null;
   // Critère de recherche dans la base LDAP
   DirectorySearcher mySearcher = new DirectorySearcher(entry,"(objectCategory=group)");
   // On indique les propriétés qu'on souhaiterai utiliser
   mySearcher.PropertiesToLoad.Add("name");
   mySearcher.PropertiesToLoad.Add("member");
   // On lance la recherche
   foreach(SearchResult res in mySearcher.FindAll())
   {
      // On vérifie que le groupe contient une propriété "member"
      if(res.Properties["member"] != null)
      {
if(members == null)
      members = new ArrayList();
                // On instancie notre classe ADGroupe (voir ci-dessous)
ADGroupe grp = new ADGroupe();
grp.name = res.Properties["name"][0].ToString();
for(int i=0; i<res.Properties["member"].Count; i++)
      grp.membres.Add(res.Properties["member"][i].ToString());
members.Add(grp);
      }
   }
   // On retourne notre ArrayList
   return members;
}

Puis dans la méthode Load du Formulaire:
private void Form1_Load(object sender, System.EventArgs e)
{
   entry = new DirectoryEntry("LDAP://[nom de ton serveur Active Directory]");
   entry.Username = @"[DOMAINE\Utilisateur]";
   entry.Password = "[Mot de Passe]";
   ArrayList groupes = this.getADGroupes();
   if(groupes != null)
      foreach(ADGroupe grp in groupes)
      // Ajoute à la dropdownlist notre Objet ADGroupe   
      this._ddlGrpe.Items.Add(grp);
}

Voici maintenant la méthode de l'évènement selectedIndexChanged de ta dropdownlist:

private void _ddlGrpe_SelectedIndexChanged(object sender, System.EventArgs e)
{
   // On vide la listbox
   this._lbUsers.Items.Clear();
   // On vérifie qu'il y a y a bien un item sélectionné et sa nature (dans le cas où tu mettrais une liste d'objet différents)
   if(_ddlGrpe.SelectedItem != null && _ddlGrpe.SelectedItem is ADGroupe)
      foreach(string ut in ((ADGroupe)_ddlGrpe.SelectedItem).membres)
                // On ajoute les utilisateurs à la listbox
this._lbUsers.Items.Add(ut);
}

Maintenant voici la classe ADGroupe:
Alle n'a rien d'extraodinaire, c'est une classe public qui à un champs public (pour faire rapide) name, contenant le nom du groupe, et un champs membres qui est une ArrayList. La méthode ToString(à a été réécrite afin de pouvoir afficher le nom du groupe lorsque la dropdownlist fera appel à cette méthode lors du listing des groupes

public class ADGroupe
{
public string name = null;
public ArrayList membres = null;

public ADGroupe()
{
membres = new ArrayList();
}

public override string ToString()
{
return this.name;
}

}



Voilà, si t'as des question n'hésites pas.

Ah oui !! tu constateras que les utilisateurs seront affichées de la manière suivante:
CN: nom de l'utilisateur; CN:domaine; etc....
il te suffira ensuite de soustraire l'info que tu ve par le moyen que tu ve. tu pourras te débrouiller pour ca ;)

Frederyck
Commenter la réponse de Frederyck
infoWeb31 4 Messages postés mercredi 9 avril 2014Date d'inscription 2 juin 2014 Dernière intervention - 11 avril 2014 à 11:37
0
Merci
Bonjour, j'ai une question dans le même type que les questions précédentes. (Je code en C#)

J'ai réussi à afficher pour un utilisateur AD défini, ses groupes et OU associés :

"Searcher.Filter = "(&(anr=" + user + ")(objectCategory=person))"

SearchResult = searcher.FindOne();

DirectoryEntry DirEntry = result.GetDirectoryEntry();

IEnumerable obj = DirEntry.Properties["memberof"].Value as IEnumerable; "

Cependant, j'aimerai récupérer dans une variable de caractères uniquement les groupes d'un utilisateur (CN) et non pas comme actuellement les groupes + les OU + le domaine.

Si vous avez des pistes à me conseiller, je vous en remercie d'avance.

Cordialement,
Commenter la réponse de infoWeb31

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.