Thursday, April 14, 2016

Powershell to set all pages in a subsite to a specific Page Layout

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue



#Variables for Web and Page URLs

$WebURL="http://somesite.company.com/sites/collection/subsite"

$OldPageLayoutName="OldPageLayout.aspx"

$NewPageLayoutName="NewPageLayout.aspx"



#Get the web and page

$Web = Get-SPWeb $WebURL



#Get Publishing Site and Web

$PublishingSite = New-Object Microsoft.SharePoint.Publishing.PublishingSite($Web.Site)

$PublishingWeb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($web)



#Get New Page Layout

$SitePageLayouts = $PublishingSite.GetPageLayouts($false)

$NewPageLayout = $SitePageLayouts | ? {$_.Name -eq $NewPageLayoutName}



#Get Pages Library

$PublishingPages = $PublishingWeb.GetPublishingPages()



#Iterate throgh each page

foreach ($Page in $PublishingPages)

{


        $Page.CheckOut()

        $Page.Layout = $NewPageLayout

        $Page.ListItem.Update();

        $Page.CheckIn("Page layout Updated via PowerShell")

    

        #$page.ListItem.File.Publish("")

        if ($Page.ListItem.ParentList.EnableModeration)

        {

            $Page.ListItem.File.Approve("Publishing Page Layout Updated!");

        }



     write-host "Updated Page layout on: "$Page.url

  
}

$Web.Dispose()

No comments:

Post a Comment