0

I have deployed webparts to some SharePoint site say "http://SiteCollection:6413/SiteName/". Now I want to know all the available Webpart which are addable to any page (whether are those already added to any page or not).

Why do I want to know this?
When I deploy the solution to QA Environment I am not able to find either web parts or Group under which those kept. But the page is working fine. Once I deleted webpart from the page and wanted to add back I am not able to find the same on site.

Someone can correct me if they understand the issue and I am not able to explain it properly. Please help by tagging appropriate tags.

0

You can reuse below script according to your requirement.

######################### this method will return the WebParts in the Web Application and the Page Information



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"
 }



 ########### End of Method #################

Ref1 Ref2

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.