I ran into an issue where several of my Page Layouts had been customized using SharePoint Designer. I didn’t want them to be customized, because I had deployed an upgraded solution file, which had updated the Page Layout Feature on the file system; if the pages remained customized in SPD, they wouldn’t “pick up” the new changes on the file system. I wrote a short command-line application, and I thought I’d post the code so you could do it, too, if needed.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Publishing;

namespace CTP.SharePoint.Publishing.RevertPageLayouts
{
    class Program
    {
        static void Main(string[] args)
        {
            //Make sure the user entered a site collection URL
            if (args.Length < 1)
            {
                Console.WriteLine("Please enter a Site Collection URL.");
                Console.Read();
                return;
            }

            try
            {
                string url = args[0];
                using (SPSite siteCollection = new SPSite(url))
                {
                    PublishingSite pubSite = new PublishingSite(siteCollection);
                    PageLayoutCollection pageLayouts = pubSite.GetPageLayouts(true);
                    foreach (PageLayout pageLayout in pageLayouts)
                    {
                        if (pageLayout.ListItem.File.CustomizedPageStatus == SPCustomizedPageStatus.Customized)
                        {
                           //Make sure the Page Layout hasn't been checked out. (If it is checked out, this will skip that file.)
                            if (pageLayout.ListItem.File.CheckOutStatus == SPFile.SPCheckOutStatus.None)
                            {
                                pageLayout.ListItem.File.CheckOut();
                                try
                                {
                                    pageLayout.ListItem.File.RevertContentStream();
                                    pageLayout.Update();

                                    Console.WriteLine("Reverted " + pageLayout.Title);
                                }
                                catch (Exception exc)
                                {
                                    Console.WriteLine("An error occurred with layout " + pageLayout.Title + ". Error " + exc.Message);
                                }
                                pageLayout.ListItem.File.CheckIn("Reverted page layout to original");
                            }                          
                        }
                    }
                }
                Console.Read();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.Read();
            }
        }
    }
}