Lister les membres d un groupe active directory

Résolu
loseyes Messages postés 3 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 24 septembre 2004 - 21 sept. 2004 à 15:35
infoWeb31 Messages postés 4 Date d'inscription mercredi 9 avril 2014 Statut Membre Dernière intervention 2 juin 2014 - 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
A voir également:

8 réponses

Frederyck Messages postés 62 Date d'inscription vendredi 6 décembre 2002 Statut Membre Dernière intervention 16 janvier 2009 1
21 sept. 2004 à 15:49
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
1
loseyes Messages postés 3 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 24 septembre 2004
24 sept. 2004 à 10:48
merci je vais essayer
je te tiens au courant
0
loseyes Messages postés 3 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 24 septembre 2004
24 sept. 2004 à 12:07
ça marche parfaitement.
un grand merci pour tout.
0
Frederyck Messages postés 62 Date d'inscription vendredi 6 décembre 2002 Statut Membre Dernière intervention 16 janvier 2009 1
24 sept. 2004 à 12:10
Content d'avoir pu t'aider ;)

Frederyck
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jplucien Messages postés 5 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 4 octobre 2004
4 oct. 2004 à 23:25
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
0
jplucien Messages postés 5 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 4 octobre 2004
4 oct. 2004 à 23:26
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
0
Frederyck Messages postés 62 Date d'inscription vendredi 6 décembre 2002 Statut Membre Dernière intervention 16 janvier 2009 1
5 oct. 2004 à 12:58
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
0
infoWeb31 Messages postés 4 Date d'inscription mercredi 9 avril 2014 Statut Membre Dernière intervention 2 juin 2014
11 avril 2014 à 11:37
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,
0
Rejoignez-nous