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 :  1    Total :   3845
Plan, Migrate, Secure, Report
SharePoint & Office 365 Tool. Simple & Easy to Use. 15-Day Trial!

Sharegate: Kick-Ass Tool
Think Your SharePoint & Office 365 Are Secure ? Find Out Now!


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.

SharePoint Usage Reports
Usage reports, collaboration and audit for SharePoint.
Categories

Migratiin Tools for SharePoint