#
Add SharePoint cmdlets reference
Add - PSSnapin microsoft.sharepoint.powershell - ErrorAction SilentlyContinue
function enumerateWebParts($Url) {
$site = new - object Microsoft.SharePoint.SPSite $Url
foreach($web in $site.AllWebs) {
if ([Microsoft.SharePoint.Publishing.PublishingWeb]::IsPublishingWeb($web)) {
$pWeb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($web)
$pages = $pWeb.PagesList
Write - Host "Processing Web:"
$pWeb.Url "..." - ForegroundColor Magenta
foreach($item in $pages.Items) {
$fileUrl = $webUrl + "/" + $item.File.Url
Write - Host " "
$fileUrl - ForegroundColor Green
$manager = $item.file.GetLimitedWebPartManager([System.Web.UI.WebControls.Webparts.PersonalizationScope]::Shared);
$wps = $manager.webparts
$wps | select - object@ {
Expression = {
$pWeb.Url
};
Label = "Web URL"
}, @ {
Expression = {
$fileUrl
};
Label = "Page URL"
}, DisplayTitle, IsVisible, @ {
Expression = {
$_.GetType().ToString()
};
Label = "Type"
}
}
} else {
Write - Host " Not a publishing web:"
$web.Url ". Looking for Site Pages library." - ForegroundColor Magenta
$pages = $null
$pages = $web.Lists["Site Pages"]
if ($pages) {
Write - Host " "
$pages.Title "found." - ForegroundColor Green
foreach($item in $pages.Items) {
$fileUrl = $webUrl + "/" + $item.File.Url
$manager = $item.file.GetLimitedWebPartManager([System.Web.UI.WebControls.Webparts.PersonalizationScope]::Shared);
$wps = $manager.webparts
$wps | select - object@ {
Expression = {
$pWeb.Url
};
Label = "Web URL"
}, @ {
Expression = {
$fileUrl
};
Label = "Page URL"
}, DisplayTitle, IsVisible, @ {
Expression = {
$_.GetType().ToString()
};
Label = "Type"
}
}
} else {
Write - Host " Site Pages library not found." - ForegroundColor Red
}
}
Write - Host "... completed processing"
$web "..." - ForegroundColor Magenta
}
}
$row = enumerateWebParts('http://localhost')
$row | Out - File c: \789. csv - appendThis code snippet for PowerShell to get all webparts from pages in a site.