IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#][ActiveDirectory] Lister les membres d'un groupe


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 162
    Points : 64
    Points
    64
    Par défaut [C#][ActiveDirectory] Lister les membres d'un groupe
    Bonjour à tous,

    J'arrive à lister les membres d'un groupe Active Directory à l'aide de ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DirectoryEntry Ldap = new DirectoryEntry("LDAP://" + _domainActiveDirectory, _userAuthentification, _passwordAuthentification);
                    DirectorySearcher pathSearch = new DirectorySearcher(Ldap);
                    pathSearch.Filter = ("(&(objectClass=Group)(CN=" + nameGroup + "))");
                    SearchResult result = pathSearch.FindOne();
                    DirectoryEntry myGroup = new DirectoryEntry(result.Path);                
                    foreach (string unUser in myGroup.Properties["Member"])
                    {
                       _usersOfGroup.Add(unUser.ToString());
                    }
                    Ldap.Close();
    Mais voilà, j'ai deux problèmes.

    - Ce code me retourne aussi bien les ordinateurs du groupe que les utilisateurs. Comment faire pour séparer les deux et ainsi remplir deux Array List distinctes (_userOgGroup et _computersOfGroup) par exemple?

    - Ce code me retourne le nom des utilisateurs (Display Name) alors que je souhaiterais qu'il me retourne leur login (SAMAccountName) (car le Display Name n'est pas forcément unique dans l'annuaire). Comment faire ?


    Je vous remercie d'avance

    Ben

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434

  3. #3
    Membre régulier
    Femme Profil pro
    Consultante informatique décisionnelle et bases de données
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultante informatique décisionnelle et bases de données

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Points : 101
    Points
    101
    Par défaut lien obsolète ?
    Je viens de cliquer sur le lien ci-dessus. A priori, il est obsolète.

    J'ai la même problèmatique que Ben et je ne sais comment récupérer le login.

    Anne

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 250
    Points : 420
    Points
    420
    Par défaut
    Salut !

    Peut être que tu y arriveras plus facilement en utilisant Linq To Active Directory

    http://linqtoad.codeplex.com/

  5. #5
    Membre régulier
    Femme Profil pro
    Consultante informatique décisionnelle et bases de données
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultante informatique décisionnelle et bases de données

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Points : 101
    Points
    101
    Par défaut
    Merci Julien pour ta réponse.

    J'ai testé rapidement.
    J'ai bien le system.DirectoryServices de déclarer mais je ne trouve pas de 'directorySource' pourtant je travaille avec le Framework 3.5 sur vs2008...

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Points : 560
    Points
    560
    Par défaut
    Yop, voici une partie de code que j'avais fait y a 2 ans, c'était une méthode récursive qui permettait d'obtenir la liste des users dans un groupe et ses sous groupes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    public void GetMembres(DirectoryEntry de, ArrayList ListeMembres)
     {
                if (de.Properties.Contains("member"))
                {
                    foreach (string memb in de.Properties["member"])
                    {
                        string imb = memb;
                        if (!imb.Contains("LDAP://"))
                            imb = "LDAP://" + imb;
     
                        DirectoryEntry sde = new DirectoryEntry(imb);
                        if (sde.SchemaClassName.Equals("user"))
                        {
                            UtilisateurTemp user = SetUser(sde, "AI");
     
                            if (!ListeMembres.Contains(user))
                            {
                                ListeMembres.Add(user);
                            }
                        }
                        else if (sde.SchemaClassName.Equals("group"))
                        {
                            GetMembres(sde, ListeMembres);
                        }
                    }
            }
    }
    Dans ton cas, as tu tester le SchemaClassName du DirectoryEntry ?

  7. #7
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Salut à tous.

    Quelques liens utiles pour celles ou ceux qui s'adonnent au "Directory Programming" :


    Enjoy.

  8. #8
    Membre régulier
    Femme Profil pro
    Consultante informatique décisionnelle et bases de données
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultante informatique décisionnelle et bases de données

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Points : 101
    Points
    101
    Par défaut
    Merci Benjamin et Maxime

    Benjamin
    Cette ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UtilisateurTemp user = SetUser(sde, "AI");
    doit correspondre à l'une de tes classes

    Maxime

    J'ai cru trouvé un code dans le forum indiqué mais le test me ramène une liste vide

    J'ai finalement opté pour le découpage du 'member' pour reconstruire le 'displayname' et ainsi retrouvé le 'samaccountname'. Cela ne correspond pas à ma philosophie de programmation mais cela fonctionne.

  9. #9
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Citation Envoyé par acbdev Voir le message
    Merci Benjamin et Maxime

    Benjamin
    Cette ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UtilisateurTemp user = SetUser(sde, "AI");
    doit correspondre à l'une de tes classes

    Maxime

    J'ai cru trouvé un code dans le forum indiqué mais le test me ramène une liste vide

    J'ai finalement opté pour le découpage du 'member' pour reconstruire le 'displayname' et ainsi retrouvé le 'samaccountname'. Cela ne correspond pas à ma philosophie de programmation mais cela fonctionne.
    Peux-tu re-préciser ton besoin (le post original est un peu vieux) ? Qu'est-ce que tu cherches à lister ? Quels sont les attributs que tu veux obtenir ? Mettre des bouts de code. Etc. Pour qu'on puisse t'aider plus facilement . Et n'hésite pas à créer ta propre discussion si besoin.

  10. #10
    Membre régulier
    Femme Profil pro
    Consultante informatique décisionnelle et bases de données
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultante informatique décisionnelle et bases de données

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Points : 101
    Points
    101
    Par défaut
    Je cherche à lister la liste des membres d'un groupe (login + Nom et prénom) à partir du nom d'un groupe et son domaine.

    J'arrive à obtenir la liste des membres d'un groupe sous la forme :
    'CN=Nom\, Prénom,OU=Users,OU=xxx,DC=eu,DC=xx,DC=com'
    mais pas le login à partir des propriétés d'AD.

  11. #11
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Citation Envoyé par acbdev Voir le message
    Je cherche à lister la liste des membres d'un groupe (login + Nom et prénom) à partir du nom d'un groupe et son domaine.

    J'arrive à obtenir la liste des membres d'un groupe sous la forme :
    'CN=Nom\, Prénom,OU=Users,OU=xxx,DC=eu,DC=xx,DC=com'
    mais pas le login à partir des propriétés d'AD.
    Je pense que dans ce cas, tu n'as pas le choix, il faut refaire une recherche sur chaque DN pour obtenir le user équivalent et pouvoir accéder à ses attributs. Tu peux tester un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // Une petite fonction vraiment basique qui suppose que tous tes users sont dans la même branche
    private static DirectoryEntry getUserByCN(string userCn) {
    	List<DirectoryEntry> directoryEntries = null;
    	// Tu pars de la base de tes users et tu t'authentifies
    	using (DirectoryEntry baseEntry = new DirectoryEntry("LDAP://DC=eu,DC=xx,DC=com:389/OU=Users,OU=xxx,DC=eu,DC=xx,DC=com", @"userDomain\userLogin", "userPassword", AuthenticationTypes.None)) {
    		using (DirectorySearcher searcher = new DirectorySearcher(baseEntry, string.Format(CultureInfo.InvariantCulture, "(&(objectClass=user)(cn={0}))", userCn), null, SearchScope.Subtree)) {
    			using (SearchResultCollection searchResults = searcher.FindAll()) {
    				if (searchResults == null || searchResults.Count <= 0) {
    					return null;
    				}
    				directoryEntries = new List<DirectoryEntry>();
    				foreach (SearchResult result in searchResults) {
    					directoryEntries.Add(result.GetDirectoryEntry());
    				}
    				return directoryEntries[0];
    			}
    		}
    	}
    }
     
    // Après pour l'utiliser (ex. getUserByCN("Nom\, Prénom"));
    DirectoryEntry user = getUserByCN("le CN du member que tu as récupéré dans ton groupe");
    // Tester quand même si user.Properties["sAMAccountName"] n'est pas null, ensuite même user.Properties["sAMAccountName"].Value (pas très utile certes)
    string sAMAccountName = user.Properties["sAMAccountName"].Value.ToString();
    Dis moi ce que tu obtiens.

  12. #12
    Membre régulier
    Femme Profil pro
    Consultante informatique décisionnelle et bases de données
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultante informatique décisionnelle et bases de données

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Points : 101
    Points
    101
    Par défaut
    Merci Maxime pour ton aide mais je n'obtiens rien avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DirectoryEntry("LDAP://DC=eu,DC=xx,DC=com", @"userDomain\userLogin", "userPassword", AuthenticationTypes.None))
    Je n'ai pas d'erreur mais ma liste est vide.

  13. #13
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Citation Envoyé par acbdev Voir le message
    Merci Maxime pour ton aide mais je n'obtiens rien avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DirectoryEntry("LDAP://DC=eu,DC=xx,DC=com", @"userDomain\userLogin", "userPassword", AuthenticationTypes.None))
    Je n'ai pas d'erreur mais ma liste est vide.
    Euh oui je me suis gouré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DirectoryEntry baseEntry = new DirectoryEntry("LDAP://eu.xx.com:389/OU=Users,OU=xxx,DC=eu,DC=xx,DC=com", @"userDomain\userLogin", "userPassword", AuthenticationTypes.None)
    Mais n'oublie pas de te positionner sur une entrée :
    "LDAP://eu.xx.com:389" c'est l'addresse (bon ici l'alias DNS) de ton LDAP
    "OU=Users,OU=xxx,DC=eu,DC=xx,DC=com" c'est l'entrée sur laquelle tu te positionnes

Discussions similaires

  1. Lister les membres des groupes AD
    Par Firenight dans le forum VBScript
    Réponses: 1
    Dernier message: 10/06/2010, 11h11
  2. Vbs AD Lister les membres de groupe imbriqué
    Par vikingraver dans le forum VBScript
    Réponses: 2
    Dernier message: 16/11/2009, 15h54
  3. Lister les users d'un groupe dans ActiveDirectory
    Par l0quito dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/09/2009, 15h32
  4. Lister les membres d'un groupe active directory
    Par Ludo75 dans le forum VBScript
    Réponses: 1
    Dernier message: 18/06/2008, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo