In this article, let us see, how to get the list of WebParts in an XML File.
function GetWebParts()
{
Write-Host "Entered
GetWebParts Method" -ForegroundColor Yellow
Add-Content "$ProgressFile" "Entered
GetWebParts Method"
$script:Progress = "4:Entered"
#
Get Web Application
$WebApplication = Get-SPWebApplication $Config.Configuration.WebApplication.URL
#
Assign the XML Output File Paths
$WebParts_XML_Path = $scriptBase + "\Reports-$LogTime\WebParts.xml"
#
Create the XML File Tags
$xmlWriter = New-Object System.XMl.XmlTextWriter($WebParts_XML_Path,$Null)
$xmlWriter.Formatting
= 'Indented'
$xmlWriter.Indentation
= 1
$XmlWriter.IndentChar
= "`t"
$xmlWriter.WriteStartDocument()
$xmlWriter.WriteComment('WebParts
List On the WebApplication ' + $WebApplication.DisplayName)
$xmlWriter.WriteStartElement('WebApplication')
$xmlWriter.WriteEndElement()
$xmlWriter.WriteEndDocument()
$xmlWriter.Flush()
$xmlWriter.Close()
#
Get the site Collections Object
$SiteCollections = $WebApplication | Get-SPSite -Limit All
#
write the output on XML File
$xmlDoc = [System.Xml.XmlDocument](Get-Content $WebParts_XML_Path);
$siteCollectionNode = $xmlDoc.CreateElement("SiteCollections")
$xmlDoc.SelectSingleNode("//WebApplication").AppendChild($siteCollectionNode)
$xmlDoc.Save($WebParts_XML_Path)
#
Iterate through the SiteCollections
foreach($SiteCollection in $SiteCollections)
{
$siteCollectionName = $SiteCollection |
select @{label = "Title";Ex = {$_.rootweb.Title}}
#
write the output on XML File
$xmlDoc = [System.Xml.XmlDocument](Get-Content $WebParts_XML_Path);
$siteCollectionNode = $xmlDoc.CreateElement("SiteCollection")
$xmlDoc.SelectSingleNode("//WebApplication/SiteCollections").AppendChild($siteCollectionNode)
$siteCollectionNode.SetAttribute("Name", $siteCollectionName.Title)
$siteCollectionNode.SetAttribute("Url", $SiteCollection.Url)
$subSitesNode = $siteCollectionNode.AppendChild($xmlDoc.CreateElement("SubSites"));
$xmlDoc.Save($WebParts_XML_Path)
#
Get All SubWebs
$Webs = Get-SPWeb -site $SiteCollection -Limit All
#
Iterate through the SubWebs
foreach($Web in $Webs)
{
#
write the output on XML File
$subSiteNameNode = $subSitesNode.AppendChild($xmlDoc.CreateElement("SubSite"));
$subSiteNameNode.SetAttribute("Name", $Web.Title)
$subSiteNameNode.SetAttribute("Url", $Web.Url)
$subSiteNameNode.SetAttribute("WebID", $Web.Id)
$parentWebTitle =
""
if($Web.ParentWebID
-ne "00000000-0000-0000-0000-000000000000")
{
$parentWeb
= $SiteCollection.OpenWeb($Web.ParentWebID)
$parentWebTitle
= $parentWeb.Title
}
else
{
$parentWebTitle
= "RootWeb"
}
$subSiteNameNode.SetAttribute("ParentWebName",
$parentWebTitle)
$subSiteNameNode.SetAttribute("ParentWebID",
$Web.ParentWebID)
$webPartsNode
= $subSiteNameNode.AppendChild($xmlDoc.CreateElement("WebParts"));
$xmlDoc.Save($WebParts_XML_Path)
#
Check For Publishing Site
if
([Microsoft.SharePoint.Publishing.PublishingWeb]::IsPublishingWeb($Web))
# If the Current Web is Publishing Web, then proceed
{
#
Get the Publishing Web Object
$pWeb
= [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($Web)
#
Get the Pages Doc Library
$pages
= $pWeb.PagesList
#
Iterate through all the Pages
foreach
($item in $pages.Items)
{
$fileUrl
= $Web.Url + "/" + $item.File.Url
#
Get the webPartManager Object
$manager
=
$item.file.GetLimitedWebPartManager([System.Web.UI.WebControls.Webparts.PersonalizationScope]::Shared);
#
Get the WebParts
$wps
= $manager.webparts
$wps
| select-object
@{Expression={$WebApplication.DisplayName};Label="WebApplication"},@{Expression={$siteCollectionName.Title};Label="SiteCollection"},
@{Expression={$Web.Title};Label="SubSite"},@{Expression={$item.File.Name};Label="Page
Name"},@{Expression={$fileUrl};Label="Page URL"}, DisplayTitle,
ID, IsVisible, @{Expression={$_.GetType().ToString()};Label="Type"}
#
Iterate through the WebParts
foreach($wp
in $wps)
{
#
write the output on XML File
$webPartNodeNode
= $webPartsNode.AppendChild($xmlDoc.CreateElement("WebPart"));
$webPartNodeNode.SetAttribute("Name",
$wp.DisplayTitle)
$webPartNodeNode.SetAttribute("ID",
$wp.ID)
$webPartNodeNode.SetAttribute("Visible",
$wp.IsVisible)
$webPartNodeNode.SetAttribute("Type",
$wp.GetType())
$webPartNodeNode.SetAttribute("PageName",
$item.File.Name)
$webPartNodeNode.SetAttribute("FileURL",
$fileUrl)
$xmlDoc.Save($WebParts_XML_Path)
}
}
}
else
# If the Current Web is not a Publishing Web
{
$pages
= $null
#
Get the Site Pages Doc Lib
$pages
= $Web.Lists["Site Pages"]
if
($pages)
{
#
Iterate through all the Pages
foreach
($item in $pages.Items)
{
$fileUrl
= $Web.Url + "/" + $item.File.Url
#
Get the WebPart Manager Object
$manager
= $item.file.GetLimitedWebPartManager([System.Web.UI.WebControls.Webparts.PersonalizationScope]::Shared);
#
Get All the WebParts
$wps
= $manager.webparts
$wps
| select-object
@{Expression={$WebApplication.DisplayName};Label="WebApplication"},@{Expression={$siteCollectionName.Title};Label="SiteCollection"},
@{Expression={$Web.Title};Label="SubSite"},@{Expression={$item.File.Name};Label="PageName"},@{Expression={$fileUrl};Label="Page
URL"}, DisplayTitle, ID, IsVisible,
@{Expression={$_.GetType().ToString()};Label="Type"}
#
iterate through the
WebParts
foreach($wp
in $wps)
{
#
write the output on XML File
$webPartNodeNode
= $webPartsNode.AppendChild($xmlDoc.CreateElement("WebPart"));
$webPartNodeNode.SetAttribute("Name",
$wp.DisplayTitle)
$webPartNodeNode.SetAttribute("ID",
$wp.ID)
$webPartNodeNode.SetAttribute("Visible",
$wp.IsVisible)
$webPartNodeNode.SetAttribute("Type",
$wp.GetType())
$webPartNodeNode.SetAttribute("PageName",
$item.File.Name)
$webPartNodeNode.SetAttribute("FileURL",
$fileUrl)
$xmlDoc.Save($WebParts_XML_Path)
}
}
}
else
{
Write-Host
" Site Pages library not found." -ForegroundColor
Red
}
}
}
}
#
write the output on XML File
$xmlDoc.Save($WebParts_XML_Path)
Write-Host
"Completed GetWebParts Method" -ForegroundColor Yellow
Add-Content
"$ProgressFile" "Completed GetWebParts Method"
$script:Progress
= "4:Success"
}
No comments:
Post a Comment