Lister les utilisateurs d’un groupe SharePoint contenant des groupes Active Directory

Bonjour à tous,

Aujourd’hui je vais vous parler d’une demande que j’ai eue il y a quelques temps. Le client voulait avoir une liste de tous les membres d’un groupe SharePoint.

A première vue pas de soucis, il suffit d’utiliser un

 
SPGroup group;            
group.Users ;

Sauf que plus tard dans le développement, l’utilisation de groupes active directory à été décidée pour faciliter la gestion des utilisateurs.
Et là, ca n’intéressait pas le client de voir le nom de ses groupes active directory!(Etrange non ?)

Donc voilà, après quelques recherches et plusieurs tests j’ai découvert la classe SPPrincipalInfo et l’attribut PrincipalType : http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.utilities.principaltype.aspx

Cette classe , que vous trouverez via l’assembly Microsoft.SharePoint.Utilities, permet de tester si l’utilisateur est un groupe de sécurité, autrement dit , si c’est un groupe Active Directory.

Me voici donc avec la première partie de mon code


SPSecurity.RunWithElevatedPrivileges(delegate
            {

                using (SPSite adminSite = new SPSite(SPContext.Current.Site.ID))
                {
                    using (SPWeb adminWeb = adminSite.OpenWeb(SPContext.Current.Web.ID))
                    {
                        string myGroup = "GroupName";
                        List listeUsers = new List();
                        bool reachedMax;
                        SPPrincipalInfo[] principals = SPUtility.GetPrincipalsInGroup(adminWeb, myGroup, 500, out reachedMax);
                        foreach (SPPrincipalInfo item in principals)
                        {
                            if (item.PrincipalType == SPPrincipalType.SecurityGroup)
                            {
                                string[] temp = item.DisplayName.Split('\\');
                                listeUsers.AddRange(GetGroupMembers(temp[temp.Length - 1]));
                            }
                            else
                                //listeUsers.Add(item.LoginName.ToLower());//display the login name
                                listeUsers.Add(item.DisplayName.ToLower());//display the display name
                        }
                    }
                }
            });				
		

La distinction entre utilisateurs SharePoint et groupe active directory est faite, maintenant il n’y a plus qu’a faire une requête sur l’active directory pour récupérer l’ensemble des utilisateurs de ce groupe.



public List GetGroupMembers(string strGroup)
        {
            List groupMemebers = new List();

            try
            {
                DirectoryEntry ent = new DirectoryEntry("LDAP://DC=Test,DC=COM");// Change by your AD link

                DirectorySearcher srch = new DirectorySearcher("(CN=" + strGroup + ")");

                SearchResultCollection coll = srch.FindAll();

                foreach (SearchResult rs in coll)
                {
                    ResultPropertyCollection resultPropColl = rs.Properties;

                    foreach (Object memberColl in resultPropColl["member"])
                    {
                        DirectoryEntry gpMemberEntry = new DirectoryEntry("LDAP://" + memberColl);

                        System.DirectoryServices.PropertyCollection userProps = gpMemberEntry.Properties;

                       
                        //getting user properties from AD

                        object obVal = userProps["displayName"].Value;
                        object obAcc = userProps["sAMAccountName"].Value;


                        if (null != obVal)
                        {
                            groupMemebers.Add(obVal.ToString().ToLower());//display the display name
                            //groupMemebers.Add(obAcc.ToString());//Display the login
                        }
                        else groupMemebers.AddRange(GetGroupMembers(userProps["sAMAccountName"].Value.ToString()));

                    }
                }
            }

            catch (Exception ex)
            {
            }

            return groupMemebers;

        }

Et voila, nous avons la liste de tous les membres de notre groupe SharePoint !

Edit : Il existe une autre manière de faire cette requête ici

Christopher.

Cet article, publié dans SharePoint 2010, est tagué , . Ajoutez ce permalien à vos favoris.

Un commentaire pour Lister les utilisateurs d’un groupe SharePoint contenant des groupes Active Directory

  1. Ping : Get all users from SharePoint group including active directory group V2 | Christopher Clement

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s