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
 
Solution Architect
August 13, 2016
 
Rate this article
 
Views
8520

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)
         {
             AddSiteCollectionAdministrator();
         }
 
 
         public static void AddSiteCollectionAdministrator()
         {
             string TenantURL = "https://sppalsmvp-admin.sharepoint.com/";
             string Url = "https://********.sharepoint.com/sites/AASathish3";
             string UserName = "Sathish@******.onmicrosoft.com";
             string Password = "*******";
 
             using (ClientContext clientContext = new ClientContext(TenantURL))
             {
                 //Credentials
                 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;
 
                 do
                 {
                     //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));
                     clientContext.ExecuteQuery();
 
                     //Iterate the site collectio urls
                     foreach (var siteProperty in siteProperties)
                     {
                         try
                         {
                             if (siteProperty.Url == Url)
                             {
                                 //assign the specified user (current user in this case) as the site collection admin. 
                                 tenant.SetSiteAdmin(siteProperty.Url, "user1@*********.onmicrosoft.com", 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
 
                                 clientContext.ExecuteQuery();
 
                                 System.Console.WriteLine(siteProperty.Url);
                             }
                         }
                         catch (Exception ex)
                         {
                             System.Console.WriteLine("Error on: " + siteProperty.Url + " " + ex.Message);
                         }
                     }
 
                     startIndex += 300;
 
                 } while (siteProperties.Count >= 300);
             }
         }
     }
 }
 

Happy Coding,

Sathish Nadarajan.

Author Info

Sathish Nadarajan
 
Solution Architect
 
Rate this article
 
Sathish is a Microsoft MVP for SharePoint (Office Servers and Services) having 15+ years of experience in Microsoft Technologies. He holds a Masters Degree in Computer Aided Design and Business ...read more
 

Leave a comment