Revert customized master pages back to ghosted state in SharePoint 2010

When you first deploy master pages and page templates as part of a SharePoint 2010 solution package and then provision the deployed files to the master page gallery using a feature, the provisioned files start in a ghosted state and get automatically updated on every package deployment. What happens if someone makes manual changes to the provisioned files in SharePoint Designer or by uploading an updated version of the file to the master page gallery is that the edited pages get disconnected from the page version that is deployed to the file system by the SharePoint solution package and become customized, or unghosted. Any page changes deployed as part of the SharePoint solution package after that aren’t going to be reflected on the site until the pages are uncustomized and return back to the ghosted state. The process of reverting the customized files back to the ghosted state using the SharePoint UI usually involves deleting the file from the master page gallery and then reactivating the feature to provision the deployed file. This solution is not always possible or easy to do as there may be many pages that depend on the customized page template or sites using the customized master page and SharePoint UI won’t allow you to delete the file from the gallery if that’s the case. Luckily, there’s a simple way to accomplish the desired effect in PowerShell!

First, get a reference to the root SPWeb object for the site collection and check the customization status of the page:

Add-PSSnapIn Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

$web = Get-SPWeb http://intranet.contoso.com
$file = $web.GetFile("/_catalogs/masterpage/MyCustomMasterPage.master")
$file.CustomizedPageStatus

The possible page customization options are:

  • Uncustomized – the page is not customized and is in the ghosted state. No action is necessary.
  • Customized – the page has been customized and is currently in the unghosted state. This page can be reverted back to the ghosted state using the script below.
  • None – the page was never ghosted. This is often the case if the master page was uploaded to the master page gallery first and only then added to the SharePoint deployment package. The only solution here is to delete the file and reactivate the feature to provision the deployed version of the page.

The following script will revert any customized page back to the ghosted state:

if($file.CustomizedPageStatus -eq "Customized") {
    $file.RevertContentStream()
    $file.CustomizedPageStatus
}

At this point the page customization status will change to Uncustomized, the page will return back to the ghosted state and will be in sync with the page version deployed as part of the SharePoint deployment package.