In this “Get all webparts” tutorial, I will share how we can get all web parts from pages in a site using PowerShell CSOM and get web part properties using PnP PowerShell.
Key Highlights: Get all webparts from pages in a site using PowerShell in SharePoint Online
- Get all web parts from pages in a site using PowerShell CSOM and get web part properties using Powershell
- Retrieve web parts properties from SharePoint online page using PowerShell Get-PnPWebPartProperty command
- How to export the SharePoint web part properties into a CSV file using the PowerShell script?
Get all web parts from pages in a site using PowerShell CSOM and get web part properties using Powershell
Get all web parts from pages in a site using PowerShell CSOM script can be used to SharePoint Online and SharePoint 2013/2016/2019 environment.

#The below function will read the web part properties from a given SharePoint page which will take site URL, PageRelativeURL, UserName, and Password as parameters. #Load SharePoint 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" cls $fileName = "WebPart_Properties_Report" #'yyyyMMddhhmm yyyyMMdd $enddate = (Get-Date).tostring("yyyyMMddhhmmss") #$filename = $enddate + '_VMReport.doc' $logFileName = $fileName +"_"+ $enddate+"_Log.txt" $invocation = (Get-Variable MyInvocation).Value $directoryPath = Split-Path $invocation.MyCommand.Path $directoryPathForLog=$directoryPath+"\"+"LogFiles" if(!(Test-Path -path $directoryPathForLog)) { New-Item -ItemType directory -Path $directoryPathForLog #Write-Host "Please Provide Proper Log Path" -ForegroundColor Red } #$logPath = $directoryPath + "\" + $logFileName $logPath = $directoryPathForLog + "\" + $logFileName $isLogFileCreated = $False #DLL location $directoryPathForDLL=$directoryPath+"\"+"Dependency Files" if(!(Test-Path -path $directoryPathForDLL)) { New-Item -ItemType directory -Path $directoryPathForDLL #Write-Host "Please Provide Proper Log Path" -ForegroundColor Red } #DLL location $clientDLL=$directoryPathForDLL+"\"+"Microsoft.SharePoint.Client.dll" $clientDLLRuntime=$directoryPathForDLL+"\"+"Microsoft.SharePoint.Client.dll" Add-Type -Path $clientDLL Add-Type -Path $clientDLLRuntime #File Download location $directoryPathForFileDownloadLocation=$directoryPath+"\"+"Downloaded Files" if(!(Test-Path -path $directoryPathForFileDownloadLocation)) { New-Item -ItemType directory -Path $directoryPathForFileDownloadLocation #Write-Host "Please Provide Proper Log Path" -ForegroundColor Red } #File Download location function Write-Log([string]$logMsg) { if(!$isLogFileCreated){ Write-Host "Creating Log File..." if(!(Test-Path -path $directoryPath)) { Write-Host "Please Provide Proper Log Path" -ForegroundColor Red } else { $script:isLogFileCreated = $True Write-Host "Log File ($logFileName) Created..." [string]$logMessage = [System.String]::Format("[$(Get-Date)] - {0}", $logMsg) Add-Content -Path $logPath -Value $logMessage } } else { [string]$logMessage = [System.String]::Format("[$(Get-Date)] - {0}", $logMsg) Add-Content -Path $logPath -Value $logMessage } } #The below function will read the web part properties from a given SharePoint page which will take siteURL, PageRelativeURL, UserName and Password as paramaters. Function GetWebPartPropertyDetails() { param ( [Parameter(Mandatory=$true)] [string] $SPOSiteURL, [Parameter(Mandatory=$true)] [string] $pageRelativeURL, [Parameter(Mandatory=$true)] [string] $UserName, [Parameter(Mandatory=$true)] [string] $Password ) Try { $securePassword= $Password | ConvertTo-SecureString -AsPlainText -Force #Setup the Context $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SPOSiteURL) $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName, $securePassword) $fileByServerRelativeUrl=$pageRelativeURL #Getting the page details $file = $ctx.Web.GetFileByServerRelativeUrl($fileByServerRelativeUrl) $ctx.Load($file) $ctx.ExecuteQuery() #Extract all the webparts from the given page. Write-Host "Extracting all webparts from the given page." $wpManager = $file.GetLimitedWebPartManager([Microsoft.SharePoint.Client.WebParts.PersonalizationScope]::Shared) $webpartColls = $wpManager.Webparts $ctx.Load($webpartColls) $ctx.ExecuteQuery() if($webpartColls.Count -gt 0) { Write-Host "Looping through all webparts in the page." $webPartCount=1 foreach($oneWebpart in $webpartColls) { $ctx.Load($oneWebpart.WebPart.Properties) $ctx.ExecuteQuery() $wpPropValues = $oneWebpart.WebPart.Properties.FieldValues Write-Host "Webpart ID: " $oneWebpart.ID Write-Host $webPartCount Write-Host "##########################" -f Green foreach($oneProperty in $wpPropValues) { Write-Host "Title: " $oneProperty.Title Write-Host "Description: " $oneProperty.Description Write-Host "Chrome Type: " $oneProperty.ChromeType Write-Host "Back Ground Color: "$oneProperty.BackgroundColor Write-Host "Allow Edit: "$oneProperty.AllowEdit Write-Host "Allow Hide: "$oneProperty.AllowHide } Write-Host "##########################" -f Green $webPartCount++ } } Write-host -f Green "The web part details successfully have been extracted." } Catch { $ErrorMessage = $_.Exception.Message +"in reading web part properties!:" Write-Host $ErrorMessage -BackgroundColor Red Write-Log $ErrorMessage } } #Parameters value $siteURL="https://globalsharepoint2020.sharepoint.com/sites/CustomSearchRND" #$PageRelativeURL="/SitePages/TestWPPage.aspx" $PageRelativeURL="/sites/CustomSearchRND/SitePages/TestWPPage.aspx" $downloadLocation=$directoryPathForFileDownloadLocation; $userName = "YourSPOUsername" $passWord = "YourSPOPassword" #Parameters ends here. #Calling the GetWebPartPropertyDetails function and passing the parameters. GetWebPartPropertyDetails $siteURL $PageRelativeURL $userName $passWord
SharePoint Online WebPart Properties FieldValues Table: SharePoint web part properties
We can retrieve the below web part properties from the PowerShell CSOM coding:
Key | Value |
Height | |
Direction | 0 |
ExportMode | 1 |
Width | |
ChromeState | 0 |
AllowClose | False |
ChromeType | 2 |
Hidden | False |
CatalogIconImageUrl | |
AllowConnect | True |
AllowEdit | True |
AllowHide | True |
HelpUrl | |
HelpMode | 1 |
TitleIconImageUrl | |
TitleUrl | |
AllowMinimize | False |
Description | |
Title | Web Part Page Title Bar |
AllowZoneChange | True |
AuthorizationFilter | |
MissingAssembly | Cannot import this Web Part. |
ImportErrorMessage | Cannot import this Web Part. |
HeaderDescription | |
HeaderCaption | |
HeaderTitle | TestWPPage |
Image |
SharePoint Online WebPart Properties FieldValues screenshot:

Retrieve web parts from SharePoint page using PowerShell CSOM: Get all webparts from pages in a site
Once, we execute the above PowerShell script we can retrieve the web parts from the SharePoint page using the PowerShell CSOM.

Get all webparts – how to execute the get all web parts from pages in a site using PowerShell CSOM script?
At the end of the script, go to the parameter section and pass the parameters as like below:
#Parameters value $siteURL="https://globalsharepoint2020.sharepoint.com/sites/CustomSearchRND" #$PageRelativeURL="/SitePages/TestWPPage.aspx" $PageRelativeURL="/sites/CustomSearchRND/SitePages/TestWPPage.aspx" $downloadLocation=$directoryPathForFileDownloadLocation; $userName = "YourSPOUsername@tenant.domain.com" $passWord = "YourSPOPassword" #Parameters ends here. #Calling the GetWebPartPropertyDetail function and passing the parameters. GetWebPartPropertyDetails $siteURL $PageRelativeURL $userName $passWord
Get-PnPWebPartProperty: Retrieve webparts properties from SharePoint page using PowerShell Get-PnPWebPartProperty command (Get all webparts)
Similarly, using the Get-PnPWebPartProperty PnP command also we can retrieve web parts properties from SharePoint online page.
############################Description####################################################### ##The below script will read the web part properties from a given SharePoint page which will take ServerRelativePageUrl, Webpart ID as paramaters. ############################################################################################## CLS $siteURL="https://globalsharepoint2020.sharepoint.com/sites/CustomSearchRND/" $userName = "YourSPOUsername@tenant.domain.com" $passWord = "YourSPOPassword" $encPassWord = convertto-securestring -String $passWord -AsPlainText -Force $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $userName, $encPassWord Connect-PnPOnline -Url $siteURL -Credentials $cred Get-PnPWebPartProperty -ServerRelativePageUrl "/sites/CustomSearchRND/SitePages/TestWPPage.aspx" -Identity "dd21050d-1d5f-4379-9dd2-ca2ef151428d"
Retrieve web parts properties from SharePoint online page using PowerShell Get-PnPWebPartProperty command – screenshot (Get all webparts)

How to export the SharePoint web part properties into a CSV file using the PowerShell script?
Well, with a bit of modification to the above code, we can export the SharePoint web part properties into a CSV file using the PowerShell script.
Function GetWebPartPropertyDetails() { param ( [Parameter(Mandatory=$true)] [string] $SPOSiteURL, [Parameter(Mandatory=$true)] [string] $pageRelativeURL, [Parameter(Mandatory=$true)] [string] $UserName, [Parameter(Mandatory=$true)] [string] $Password ) Try { $securePassword= $Password | ConvertTo-SecureString -AsPlainText -Force #Setup the Context $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SPOSiteURL) $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName, $securePassword) $fileByServerRelativeUrl=$pageRelativeURL #Getting the page details $file = $ctx.Web.GetFileByServerRelativeUrl($fileByServerRelativeUrl) $ctx.Load($file) $ctx.ExecuteQuery() #Extract all the webparts from the given page. Write-Host "Extracting all webparts from the given page." $wpManager = $file.GetLimitedWebPartManager([Microsoft.SharePoint.Client.WebParts.PersonalizationScope]::Shared) $webpartColls = $wpManager.Webparts $ctx.Load($webpartColls) $ctx.ExecuteQuery() if($webpartColls.Count -gt 0) { Write-Host "Looping through all webparts in the page." $webPartCount=1 foreach($oneWebpart in $webpartColls) { $ctx.Load($oneWebpart.WebPart.Properties) $ctx.ExecuteQuery() $wpPropValues = $oneWebpart.WebPart.Properties.FieldValues Write-Host "Webpart ID: " $oneWebpart.ID Write-Host $webPartCount Write-Host "##########################" -f Green foreach($oneProperty in $wpPropValues) { Write-Host "Title: " $oneProperty.Title Write-Host "Description: " $oneProperty.Description Write-Host "Chrome Type: " $oneProperty.ChromeType Write-Host "Back Ground Color: "$oneProperty.BackgroundColor Write-Host "Allow Edit: "$oneProperty.AllowEdit Write-Host "Allow Hide: "$oneProperty.AllowHide $listItemData = @{ "Webpart Title" = $oneProperty.Title "Webpart Description" = $oneProperty.Description "Chrome Type" = $oneProperty.ChromeType "Allow Edit" = $oneProperty.AllowEdit "Allow Hide" = $oneProperty.AllowHide } New-Object PSObject -Property $listItemData } Write-Host "##########################" -f Green $webPartCount++ } } Write-host -f Green "The web part details successfully have been extracted." } Catch { $ErrorMessage = $_.Exception.Message +"in reading web part properties!:" Write-Host $ErrorMessage -BackgroundColor Red Write-Log $ErrorMessage } return $listItemData }
Test the above code – by calling the function:
#Parameters value $siteURL="Your site URL" $PageRelativeURL="/sites/yoursite/SitePages/your_webpart_page.aspx" $userName = "Your username" $passWord = "Your Password" #Parameters ends here. #Calling the GetWebPartPropertyDetail function and passing the parameters. GetWebPartPropertyDetails $siteURL $PageRelativeURL $userName $passWord | Export-Csv "C:\Temp\TestExport.csv"
Output: exported SharePoint web part properties into a CSV file using the PowerShell script

Summary: Get all webparts from pages in a site using PowerShell in SharePoint Online
Thus, in this article, we have learned the following:
- How to get all web parts from pages in a site using PowerShell CSOM and get web part properties using Powershell CSOM in SharePoint Online.
- How to retrieve web parts properties from SharePoint online page using PowerShell Get-PnPWebPartProperty command
- How to export the SharePoint web part properties into a CSV file using the PowerShell script.
See Also: SharePoint PowerShell tutorial
You may also like the following SharePoint PowerShell tutorials:
- Get document library inventory report in SharePoint using PowerShell script
- How to start SharePoint list workflow using PowerShell
- How to hide quick launch menu in SharePoint online using PnP PowerShell
- Edit user Permission is greyed Out SharePoint Online
- Get workflow inventory from SharePoint online using PowerShell CSOM
- Create a modern team site using PnP PowerShell in SharePoint
- In 2 steps convert a classic SharePoint page to modern using PnP
- SharePoint Online: Delete All Files from document library for the given date – PowerShell CSOM
- Create SharePoint online list using PnP provisioning template
- SharePoint Automation: PowerShell script to get remote server information
- Office 365: Retrieve hub sites and associated sites using PnP Powershell
- SharePoint Online Automation – O365 – Upload files to document library using PowerShell CSOM
- SharePoint Online Automation – O365 – Create multiple items in a list using PowerShell CSOM
- SharePoint Online Automation – O365 – Update document library metadata using PowerShell CSOM
- [Solved] Fix the “The term ‘Get-SPWeb’ is not recognized as the name of a cmdlet, function” PowerShell error
- Export sites, lists, or document libraries in SharePoint Server