Identify and Enumerate Publishing Pages on Site Collection


Hello,

last time i need to identify all Publishing Pages in a site collection and do some actions on all of them. Therefore i wrote a short tool for this.

To do this action you can normally use more than one way to reach the target. But in my case the site collection has a size of 60 GB and the code need to run over more then 26000 Pages.

So it makes a difference to have execution time of 8 hours or less than 2 hours. 🙂

My first solution was to identify Publishing pages on their “Pages” Library. Such an implementation runs completely on WSS, so on Microsoft.SharePoint namespace and is not optimized.

using (SPSite site = new SPSite(url))
{ 
    foreach (SPWeb web in site.AllWebs)
    {
        try
        {
            SPList list = web.Lists["Pages"];
            foreach(SPListItem item in list)
            {
                // do my stuff on each Pages
                // ...
            }
        }
        catch (exception e)
        {}
    }
}

Disadvantage of using only WSS namespace

Multi-Languages SPWeb-object have difference Pages-Library names like (Pages, Seiten, Paginas, …), so your code need to be aware of each languages.

 

It’s more efficient to use the Publishing namespace: Microsoft.SharePoint.Publishing

using (SPSite site = new SPSite(url))
{ 
    foreach (SPWeb web in site.AllWebs)
    {
        try
        {  
            if (PublishingWeb.IsPublishingWeb(web))
            {
                PublishingWeb pubweb = PublishingWeb.GetPublishingWeb(web);
                PublishingPageCollection pages = pubweb.GetPublishingPages();
    
                foreach (PublishingPage page in pages)
                {
                    // do some stuff 
                    // ...
                }
            }
        }
        catch (exception e)
        {}
    }
}

the second solution is faster &  multilingual.

regards

Patrick

Comments (0)

Skip to main content