In one of my projects we needed a PowerShell script for deleting an unnecessary page layout for all web application. Here is the script that I wrote. This is not only for page layouts, it can be used for masterpages.
param
(
[string]$WebApplicationUrl = "",
[string]$PageLayoutName = ""
)
Remove-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
Function DeletePageLayout([string]$WebAppUrl, [string]$PageLayout)
{
$WebApp = Get-SPWebApplication $WebAppUrl
Write-Host -ForegroundColor White "Starting to remove page layout"
foreach ($SPSite in $webApp.Sites)
{
[Microsoft.Sharepoint.Publishing.PublishingSite]$PublishingSite = New-Object Microsoft.SharePoint.Publishing.PublishingSite($SPSite)
if ([Microsoft.SharePoint.Publishing.PublishingWeb]::IsPublishingWeb($PublishingSite.RootWeb) -eq $true)
{
$SiteName = $PublishingSite.RootWeb
Write-Host -ForegroundColor Green "Searching site: $SiteName"
$PageLayouts = $PublishingSite.GetPageLayouts($false)
foreach($Layout in $PageLayouts)
{
[Microsoft.SharePoint.SPFile]$File = $PublishingSite.RootWeb.GetFile($Layout.ServerRelativeUrl);
$FileName = $File.Name
if ($FileName -eq $PageLayout)
{
Write-Host -ForegroundColor White "File: $FileName"
$IsPageLayoutInUse = ($File -ne $null -and $File.BackwardLinks -ne $null -and $File.BackwardLinks.Count -gt 0)
if ($IsPageLayoutInUse -eq $false)
{
Write-Host -ForegroundColor White "Deleting: $PageLayout"
$File.Delete()
Write-Host -ForegroundColor White "Successfully deleted: $PageLayout"
}
}
}
}
}
}
If (!([string]::IsNullOrEmpty($WebApplicationUrl)))
{
If (!([string]::IsNullOrEmpty($PageLayoutName)))
{
DeletePageLayout $WebApplicationUrl $PageLayoutName
}
Else
{
Throw " - Please provide the page layout parameter -PageLayoutName"
}
}
Else
{
Throw " - Please provide the web application url parameter -WebApplicationUrl"
}
Hope this script helps..