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 :  2    Total :   5001
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 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.

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

Protect Your SharePoint