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()