Create a SubSite (Web) using a Custom Template in SharePoint Online using PowerShell and CSOM
Earlier this year I wrote a Blog post that demonstrated how to create Sub-Sites (Webs) within a SharePoint Online Site Collection using PowerShell and CSOM - https://blogs.technet.com/b/fromthefield/archive/2015/01/26/creating-a-subsite-web-using-csom-in-office-365.aspx. Recently a couple of people have reached out to me to find out if it's possible to use this approach to provision Webs using a custom Template that has been uploaded to the Site Collection - I'll not get into the argument about whether you should be using Custom Templates or not! Here is a quick overview of how to do this.
Step 1 - Upload the Template to the Site Collection
Step 2- Execute the following PowerShell to list the templates available within the Site Collection (update the highlighted variables with the Site Collection URL and LCID - if this isn't 1033)
#Add references to SharePoint client assemblies and authenticate to Office 365 site
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
$Username = Read-Host -Prompt "Please enter your username"
$Password = Read-Host -Prompt "Please enter your password" -AsSecureString
$Site = "SiteCollectionURL"
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($Site)
$Creds = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username,$Password)
$Context.Credentials = $Creds
#List Custom Templates
$Templates = $Context.Site.GetWebTemplates("1033","0")
$Context.Load($Templates)
$Context.ExecuteQuery()
$Templates | Where {$_.Name -like "*{*" } | Select Name, Description
This will return a list of all Custom Templates, in my case I have a single template, imaginatively named "MyCustomTemplate". The important piece here is the name, copy this as it will be used in the next step to provision a new Sub-Site.
Step 3 - Use the following to create a Sub-Site using the Custom Template, update the highlighted values accordingly.
#Create Sub-Web using the Custom Template
$WCI = New-Object Microsoft.SharePoint.Client.WebCreationInformation
$WCI.WebTemplate = "{516EB07D-8711-4B9F-A3AD-097B28C5CDDF}#MyCustomTemplate"
$WCI.Description = "MyNewSubSite"
$WCI.Title = "MyNewSubSite"
$WCI.Url = "MyNewSubSite"
$WCI.Language = "1033"
$SubWeb = $Context.Web.Webs.Add($WCI)
$Context.ExecuteQuery()
Brendan Griffin - @brendankarl
Comments
- Anonymous
October 21, 2015
Great article - will like be of use for some for a few years to come :-) - Anonymous
February 04, 2016
great article,
only 1 thing not working. The global navigation of the created subsite is set to 'same navigation as parent site'
But the navigation bar of the parent site is no there.
If I set the global navigation to structural navigation, save and then set global navigation to 'same navigation as parent site' again. it works.
Any idea if there is a solution for this? - Anonymous
April 23, 2016
Thanks for this great article - works perfectly. - Anonymous
January 09, 2017
The comment has been removed - Anonymous
December 04, 2017
Great Article, this is what I needed, thanks for publishing and help the community!