Link to home
Start Free TrialLog in
Avatar of it-support-at
it-support-atFlag for Austria

asked on

How I retrieve a Sharepoint group with C#

How can I get / retrieve all members of a specific Sharepoint group with C#?
For example I have the Sharepoint group "Visitors" and I need all members of it respectively their e-mail adresses.
Avatar of Shaun Vermaak
Shaun Vermaak
Flag of Australia image

If you want to use CSOM
using Microsoft.SharePoint.Client;  
using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Net;  
using System.Text;  
  
namespace GetGroupUsers  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            //Get Site Url fro user    
            Console.Write("Enter Site URL: ");  
            string strURL = Console.ReadLine();  
  
            //Get Username from user in the format of (Domain/Login ID)    
            Console.Write("Enter UserName (domain/userid): ");  
            string strUserName = Console.ReadLine();  
  
            Console.Write("Enter your password: ");  
            string pass = getPassword();  
            Console.WriteLine();  
            RETRY_GROUP:  
            Console.Write("Enter Group Name: ");  
            string groupName = Console.ReadLine();  
            Console.WriteLine();  
  
            try  
            {  
                ClientContext ctx = new ClientContext(strURL);  
                ctx.Credentials = new NetworkCredential(strUserName, pass);  
                Web web = ctx.Web;  
  
                Group group = web.SiteGroups.GetByName(groupName);  
                  
                //Parameters to receive response from the server                      
                ctx.Load(web, w => w.Title);  
                ctx.Load(group, grp => grp.Title, grp => grp.Users, grp => grp.Owner);  
                ctx.ExecuteQuery();  
  
                Console.WriteLine("Groups Name: " + group.Title);  
                Console.WriteLine("Users Count: " + group.Users.Count);  
                Console.WriteLine("Group Owner: " + group.Owner.Title);  
                Console.WriteLine("Users:");  
                foreach(User usr in group.Users)  
                {  
                    Console.WriteLine(usr.Title);  
                }  
            }  
            catch (Exception ex)  
            {  
                Console.WriteLine("Error: " + ex.Message);  
                Console.Write("Do you want to continue (y / n):");  
                ConsoleKeyInfo boolContinue = Console.ReadKey();  
                Console.WriteLine();  
                if (boolContinue.KeyChar == 'y')  
                    goto RETRY_GROUP;  
                else  
                    Console.Write("Enter to Exit.");  
            }  
  
            Console.Read();              
        }  
  
        private static string getPassword()  
        {  
            ConsoleKeyInfo key;  
            string pass = "";  
            do  
            {  
                key = Console.ReadKey(true);  
                // Backspace Should Not Work    
                if (key.Key != ConsoleKey.Backspace && key.Key != ConsoleKey.Enter)  
                {  
                    pass += key.KeyChar;  
                    Console.Write("*");  
                }  
                else  
                {  
                    if (key.Key == ConsoleKey.Backspace && pass.Length > 0)  
                    {  
                        pass = pass.Substring(0, (pass.Length - 1));  
                        Console.Write("\b \b");  
                    }  
                }  
            }  
            // Stops Receving Keys Once Enter is Pressed    
            while (key.Key != ConsoleKey.Enter);  
            return pass;  
        }  
    }  

Open in new window

https://www.c-sharpcorner.com/blogs/get-group-users-using-csom1
Avatar of it-support-at

ASKER

I want only the e-mail adresses of the a sharepoint group, what are the steps I have to follow?
use following code
SPSite site = new SPSite("Yousharepoint site here");
SPWeb web = site.RootWeb;

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    // code using the web object from outside the delegate to get the members of a group.
});

Open in new window

SPSite site = new SPSite("Yousharepoint site here");
SPWeb web = SPContext.Current.Web;

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using (SPSite elevatedSite = new SPSite(web.Site.ID))
    {
        using(SPWeb elevatedWeb = elevatedSite.OpenWeb(web.Url))
        {
            // get all group members here
        }
    }
});

Open in new window

And how I return the users or only the e-mail adress with this code?
try this example
public List<NameValuePair> GetGroupMembers(string siteUrl, string groupName)  
{  
    List<NameValuePair> groupMembers = new List<NameValuePair>();  
  
    using (SPSite site = new SPSite(siteUrl))  
    {  
  
        using (SPWeb web = site.OpenWeb())  
        {  
            NameValuePair groupMember;  
  
            SPGroup group = web.Groups[groupName];  
  
            foreach (SPUser user in group.Users)  
            {  
                groupMember = new NameValuePair();  
                groupMember.Value = groupMember.Name = user.Name;  
  
                groupMembers.Add(groupMember);  
            }    
        }  
    }  
  
    return groupMembers;    
}

Open in new window

This question needs an answer!
Become an EE member today
7 DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform.
View membership options
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.