How to Add Site Collection Administrator Programmatically to Office 365 Site Collection using Client Side Object Model (CSOM) PNP in SharePoint Office 365

Sathish Nadarajan
SharePoint MVP
Published On :   13 Aug 2016
Visit Count
Today :  6    Total :   6423

In the previous article, we saw, how to create/provision a site collection in O365 programmatically. In this article, as a continuation, let us see how to Add Site Collection Administrators to the created site programmatically.

Again, the Console Application does not require further explanation I guess.

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using Microsoft.SharePoint.Client;
 using System.Security;
 using Microsoft.Online.SharePoint.TenantAdministration;
 namespace Console.Office365
     class Program
         static void Main(string[] args)
         public static void AddSiteCollectionAdministrator()
             string TenantURL = "";
             string Url = "https://********";
             string UserName = "Sathish@******";
             string Password = "*******";
             using (ClientContext clientContext = new ClientContext(TenantURL))
                 var passWord = new SecureString();
                 foreach (char c in Password.ToCharArray()) passWord.AppendChar(c);
                 clientContext.Credentials = new SharePointOnlineCredentials(UserName, passWord);
                 var tenant = new Tenant(clientContext);
                 //Get login name of the current user
                 var currentUser = clientContext.Web.CurrentUser;
                 clientContext.Load(currentUser, u => u.LoginName);
                 int startIndex = 0;
                 SPOSitePropertiesEnumerable siteProperties;
                     //Get urls of site collections in the tenant in batches of 300 (Does not include the OneDrive for Business sites)
                     siteProperties = tenant.GetSiteProperties(startIndex, false);
                     clientContext.Load(siteProperties, siteProps => siteProps.Include(site => site.Url));
                     //Iterate the site collectio urls
                     foreach (var siteProperty in siteProperties)
                             if (siteProperty.Url == Url)
                                 //assign the specified user (current user in this case) as the site collection admin. 
                                 tenant.SetSiteAdmin(siteProperty.Url, "user1@*********", true);
                                 //tenant.SetSiteAdmin(siteProperty.Url, "Usre2@******", true);
                                 //Set the last parameter to false if you want to remove the user from the site collection admins
                         catch (Exception ex)
                             System.Console.WriteLine("Error on: " + siteProperty.Url + " " + ex.Message);
                     startIndex += 300;
                 } while (siteProperties.Count >= 300);

Happy Coding,

Sathish Nadarajan.