SharePoint Online: Web Part Usage Report using PowerShell

Requirement: Get All Web Parts from SharePoint Online Page using PowerShell.

SharePoint Online: How to Find All Web Parts from a Page?

Are you looking for a way to get a list of web parts from a modern page in SharePoint Online for troubleshooting or for gathering data about specific web parts on pages? Well, In this post, we’ll show you how to use PowerShell to get web parts from a page. Will also share the PowerShell script to find all web parts inventory from all site pages in your SharePoint Online site.

To get all web parts from a SharePoint Online page using PowerShell CSOM, use:

#Load SharePoint Online CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

#Parameters
$SiteURL = "https://Crescent.sharepoint.com/sites/Vendors"
$PageServerRelativeURL = "/sites/Vendors/SitePages/About-Us.aspx"

#Setup Credentials to connect
$Cred = Get-Credential

#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.UserName,$Cred.Password)

#Get the page
$Page = $Ctx.Web.GetFileByServerRelativeUrl($PageServerRelativeURL)
$Ctx.Load($Page)
$Ctx.ExecuteQuery()
 
#Get all webparts from the page
$WPManager = $Page.GetLimitedWebPartManager([Microsoft.SharePoint.Client.WebParts.PersonalizationScope]::Shared)
$WebParts = $WPManager.Webparts
$Ctx.Load($WebParts)
$Ctx.ExecuteQuery()
 
#Iterate through all webparts in the page
ForEach($Webpart in $Webparts)
{
    #Get Web part Properties
    $WPProperties = $Webpart.WebPart.Properties
    $Ctx.Load($WPProperties)
    $Ctx.ExecuteQuery()

    #Get Web part Properties    
    Write-Host "Webpart ID: " $Webpart.ID
    Write-host "Title:" $WPProperties.FieldValues.Title
    Write-Host "Hidden: " $WPProperties.FieldValues.Hidden
    Write-Host "Allow Hide: " $WPProperties.FieldValues.AllowHide
    Write-Host "Allow Close: " $WPProperties.FieldValues.AllowClose
    Write-Host "`n"
}

This script gets all web parts from the given page.

PnP PowerShell to Get All Web Parts from a Page

Similarly, we can use PnP PowerShell to find web parts from a web part page, as:

#Parameters
$SiteURL = "https://Crescent.sharepoint.com/sites/Vendors"
$PageServerRelativeURL = "/sites/vendors/SitePages/about-us.aspx"

#Connect to SharePoint Online site
Connect-PnPOnline -Url $SiteURL -Interactive

#Get All Web parts from the page
$Webparts = Get-PnPWebPart -ServerRelativePageUrl $PageServerRelativeURL

#Iterate through webparts
ForEach($Webpart in $Webparts)
{  
    #Get Web part properties
    Write-Host "WebPart Id:" $Webpart.Id  
    Write-Host "Title:" $Webpart.WebPart.Title
    Write-Host "Hidden:" $Webpart.WebPart.Hidden
    Write-Host "Allow Hidden:" $Webpart.WebPart.Properties.FieldValues.AllowHide
}

To get web parts from modern pages, use:

#Parameters
$SiteURL = "https://Crescent.sharepoint.com/sites/vendors"

#Connect to SharePoint Online site
Connect-PnPOnline -Url $SiteURL -Interactive

#get the page
$Page =  Get-PnPClientSidePage -Identity "Home.aspx"

#Get webparts from modern page
$WebParts = $Page.Controls

#Get web part Title and InstanceID
$Webparts | Select Title,InstanceId

Find All Web Parts Usage Inventory and Export to a CSV

Let’s get web parts from all pages on the site and create a CSV report using PnP PowerShell.

#Parameters
$SiteURL = "https://Crescent.sharepoint.com/sites/vendors"
$CSVPath = "C:\Temp\Webparts.csv"
$WebPartsData = @()

#Connect to SharePoint Online site
Connect-PnPOnline -Url $SiteURL -Interactive

#Get all pages from "Site Pages" library
$SitePages = Get-PnPListItem -List "Site Pages"  

#Iterate through each page
ForEach($Page in $SitePages)
{
    #Get All Web parts from the page
    $Webparts = Get-PnPWebPart -ServerRelativePageUrl $Page.FieldValues.FileRef

    #Iterate through webparts and collect details
    ForEach($Webpart in $Webparts)
    {  
        #Get Web part properties
        $WebPartsData += New-Object PSObject -Property @{
                "PageUrl" = $Page.FieldValues.FileRef
                "WebPart ID" = $Webpart.Id
                "WebPart Title" = $Webpart.WebPart.Title
                "Is Closed" = $Webpart.WebPart.IsClosed                
                "Hidden" = $Webpart.WebPart.Hidden
                "Zone Index" = $Webpart.WebPart.ZoneIndex
                "Allow Hide" = $Webpart.WebPart.Properties.FieldValues.AllowHide
            }       
    }
}
#Export Web part data to CSV
$WebPartsData
$WebPartsData | Export-Csv -Path $CSVPath -NoTypeInformation

In conclusion, Generating a web part usage report in SharePoint Online can provide valuable insights into how your users are interacting with the platform. Following the PowerShell script provided in this post, you should be able to generate a web part usage report and gather data on the most commonly used web parts for your SharePoint Online environment.

Salaudeen Rajack

Salaudeen Rajack - Information Technology Expert with Two-decades of hands-on experience, specializing in SharePoint, PowerShell, Microsoft 365, and related products. He has held various positions including SharePoint Architect, Administrator, Developer and consultant, has helped many organizations to implement and optimize SharePoint solutions. Known for his deep technical expertise, He's passionate about sharing the knowledge and insights to help others, through the real-world articles!

3 thoughts on “SharePoint Online: Web Part Usage Report using PowerShell

  • Hi Saluadeen, recently started learning Powershell and your site has been a Gods sent! The “Find All Web Parts Usage Inventory and Export to a CSV” is returning an empty CSV for most of the sites I run it on, is your code specific to a site type?

    Thanks

    Reply
  • great solution to assess per site, but can you do something for the entire tenant?

    Reply
  • Hi Salaudeen great work on PnP powershell can you please help to provide code for “Find All Web Parts Usage Inventory and Export to a CSV for Modern Pages in Site Collection”If you have it please share and if there is ready code to do same for all site collection in Sharepoint Online.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *