How to Create/Provision Site Collection Programmatically using Client Side Object Model (CSOM) PNP in SharePoint Office 365


Sathish Nadarajan
SharePoint MVP
Published On :   13 Aug 2016
Visit Count
Today :  7    Total :   4218



In this article, let us see how to create the Site Collections Programmatically. In many scenarios, we may need to provision Site Collection using Client Side Object Model. Hence, a Handy script will be really helpful and reduce our time.

The Code below is straight forward and does not require any 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)
         {
             //Sample();
             CreateSiteCollection();
         }
 
         public static void CreateSiteCollection()
         {
             string TenantURL = "https://******-admin.sharepoint.com";
             string Title = "AASathish1";
             string Url = "https://********.sharepoint.com/sites/AASathish3";
             string UserName = "Sathish@*******.onmicrosoft.com";
             string Password = "******";
 
             //Open the Tenant Administration Context with the Tenant Admin Url
             using (ClientContext tenantContext = new ClientContext(TenantURL))
             {
                 //Authenticate with a Tenant Administrator
                 SecureString passWord = new SecureString();
                 foreach (char c in Password.ToCharArray()) passWord.AppendChar(c);
                 tenantContext.Credentials = new SharePointOnlineCredentials(UserName, passWord);
 
                 var tenant = new Tenant(tenantContext);
 
                 //Properties of the New SiteCollection
                 var siteCreationProperties = new SiteCreationProperties();
 
                 //New SiteCollection Url
                 siteCreationProperties.Url = Url;
 
                 //Title of the Root Site
                 siteCreationProperties.Title = Title;
 
                 //Email of Owner
                 siteCreationProperties.Owner = UserName;
 
                 //Template of the Root Site. Using Team Site for now.
                 siteCreationProperties.Template = "COMMUNITY#0";
 
                 //Storage Limit in MB
                 siteCreationProperties.StorageMaximumLevel = 100;
 
                 //UserCode Resource Points Allowed
                 siteCreationProperties.UserCodeMaximumLevel = 200;
 
                 //Create the SiteCollection
                 SpoOperation spo = tenant.CreateSite(siteCreationProperties);
 
                 tenantContext.Load(tenant);
 
                 //We will need the IsComplete property to check if the provisioning of the Site Collection is complete.
                 tenantContext.Load(spo, i => i.IsComplete);
 
                 tenantContext.ExecuteQuery();
 
                 //Check if provisioning of the SiteCollection is complete.
                 while (!spo.IsComplete)
                 {
                     //Wait for 30 seconds and then try again
                     System.Threading.Thread.Sleep(30000);
                     spo.RefreshLoad();
                     tenantContext.ExecuteQuery();
                 }
 
                 System.Console.WriteLine("SiteCollection Created.");
 
             }
 
 
         }
 }
 }
 

Happy Coding,

Sathish Nadarajan.

Categories