In this article, let us see, how to change the PageLayouts and SiteTemplates settings in SharePoint 2013 using PowerShell.
Before diving into the PowerShell, let us see how to change them using the UI.
1. Go to the Site Settings
2. Click on the “Page Layouts and Site Templates”
3. Here, you can select any of the Radio Buttons based on the requirement.
4. In my case, I want to select
a. Subsites can use any site templates
b. Pages in the site can use any layout
For that, I was about to give a PowerShell Script as a deployment package.
The script is a very much straight forward one.
$web = Get-SPWeb "http://c4968397007:1000"
if ([Microsoft.SharePoint.Publishing.PublishingWeb]::IsPublishingWeb($web))
{
$spPub = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($web)
$spPub.AllowAllPageLayouts($false)
$spPub.Update()
}
In the same manner, to update the WebTemplates property use the below.
$spPub.AllowAllWebTemplates($false)
In case, if we want to have “SubSites can only use the Following Site Templates”, then the code will be like below.
$templateNamesToKeep = "STS#0","PROJECTSITE#0","BLOG#0"
Start-SPAssignment -Global
$web = Get-SPWeb <URL of site>
# get the existing web templates from the site that will be filtered down
# 1033 is the locale id for English US (en-us), be sure to change to your locale
$existingWebTemplates = $web.GetAvailableWebTemplates(1033)
$newWebTemplates = New-Object "System.Collections.ObjectModel.Collection[Microsoft.SharePoint.SPWebTemplate]"
# filter existing web templates and only keep if in the list of template names to keep
$newWebTemplates = $existingWebTemplates | Where-Object {$_.name -in $templateNamesToKeep}
$web.SetAvailableWebTemplates($newWebTemplates, 1033)
$web.Update()
Stop-SPAssignment -Global
All the settings revolving around this page would be managed by the above piece of scripts with a minimal modifications. Hope this will help for the Administrators much.
Happy Coding.
Sathish Nadarajan.
Leave a comment