![]()
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="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="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="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