You may have run the standard script, changed your page
layout, but the content type is out of whack. That or maybe you started
swapping the layout using the UI and thought wow there’s got to be a better way;
and that way is through PowerShell, here’s the script that I use, but remember
your new content type has to be added to the Pages document library content
types, in the list settings.
function LoadSharePointPowerShellEnviroment
{
write-host
write-host "Setting
up Powershell enviroment for Sharepoint" -foregroundcolor Blue
Add-PSSnapin "Microsoft.Sharepoint.PowerShell" -ErrorAction SilentlyContinue
Write-host "Sharepoint
PowerShell Snapin loaded." -foregroundcolor Green
}
Clear-Host
LoadSharePointPowerShellEnviroment
write-host
$web = Get-SPWeb("http://yoursite/yourweb")
$newCT = $web.lists["Pages"].ContentTypes["New Page
Layout"]
$newPageLayout = "/_catalogs/masterpage/NewLayout.aspx,
New Page Layout"
$oldContentTypeName = "Old Page
Layout"
foreach($page in $web.lists["Pages"].Items)
{
$file = $web.GetFile($page.url)
if($page.ContentType.Name -eq $oldContentTypeName)
{
Write-host $page.url -foregroundcolor blue
$file.CheckOut("Online", $null)
$file.Properties["PublishingPageLayout"] = $newPageLayout
$file.Properties["ContentTypeId"] = $newCT.Id.ToString()
$file.Update()
$file.CheckIn("Update
page layout via PowerShell",[Microsoft.SharePoint.SPCheckinType]::MajorCheckIn)
$file.Approve("Approved
through PowerShell")
}
}
$web.Dispose()
one thing that you can note that's different from the standard swap page layout script that you'll see floating around on the internet is that I also update the content type Id on the file properties, if you don't do this they page layout will change, but the content type will still be in use if you try to remove it form the page layout.
Three things of note:
- Make sure all of your pages with the old layout are checked in before you run this script, or update the script to check them in for you.
- If you still can't remove the page layout from the library after running this script, odds are it's a problem in your content database; at least that's where my research led me, and as you may know any direct modifications to your content database will result in it not being supported by Microsoft. Thus I abandoned that avenue and just hid it on the new button in the list settings.
- Your file properties are case sensitive PublishingPageLayout is fine, but publishingPageLayout will not work.