Update web part properties on modern pages
Update web part properties on modern pages
Summary
Script will update web part properties on multiple pages by their Id, Instance Id, or Title
Implementation
- Open Windows PowerShell ISE
- Edit Script and add details like SharePoint tenant URL, Term groups, and the output directory
- Press run
Function Update-CCWebpartProperties() {
PARAM (
[Parameter(Mandatory = $true)]
[string]$SiteURL,
[Parameter(Mandatory = $false)]
[string[]]$Pages,
[Parameter(Mandatory = $true)]
[string]$WebPartIdentity,
[Parameter(Mandatory = $false)]
[string]$PropertyKey,
[Parameter(Mandatory = $true)]
[object]$PropertyValue
)
Try {
## Connect to SharePoint Online site
Write-Host "Connect to $($SiteURL)"
Connect-PnPOnline -URL $SiteURL -UseWebLogin
# If page parameter is empty, loop through all pages
if ($Pages.Length -lt 1) {
$pageItems = Get-PnPListItem -List "Site Pages"
$Pages = $pageItems | ForEach-Object { $_["FileLeafRef"] }
}
$Pages | ForEach-Object {
try {
$page = Get-PnPPage -Identity $_
# Get controls on the page with the identity (id, instance id, or title)
$controls = $page.Controls | Where-Object { $WebPartIdentity -eq $_.Title -or $WebPartIdentity -eq $_.WebPartId -or $WebPartIdentity -eq $_.InstanceId }
Write-Host "Found ($($controls.Length)) web part(s)"
$controls | ForEach-Object {
Write-Host "Updating web part, Title: $($_.Title), InstanceId: $($_.InstanceId)"
try {
$webpartJsonObj = ConvertFrom-Json $_.PropertiesJson
if ($PropertyKey) {
$webpartJsonObj.$PropertyKey = $PropertyValue
}
else {
$webpartJsonObj = $PropertyValue
}
$_.PropertiesJson = $webpartJsonObj | ConvertTo-Json
Write-Host "Web part properties updated!" -ForegroundColor Green
}
catch {
Write-Host "Failed updating web part, Title: $($_.Title), InstanceId: $($_.InstanceId), Error: $($_.Exception)"
}
}
$null = $page.Save()
$null = $page.Publish()
Write-Host "$($_) saved and published." -ForegroundColor Green
}
catch {
Write-Host "Failed updating $($page.Title): $($_.Exception)" -ForegroundColor Red
}
}
## Disconnect the context
Disconnect-PnPOnline
}
Catch {
Write-Host $_.Exception
Break
}
}
Update-CCWebpartProperties -SiteURL https://contoso.sharepoint.com/sites/test -Pages "PnPSamples" -WebPartIdentity "HelloWorld" -PropertyKey "description" -PropertyValue "Sharing is caring!"
# More examples
<#
# Multi pages
Update-CCWebpartProperties -SiteURL https://contoso.sharepoint.com -Pages "Home","PnPCommunity" -WebPartIdentity "HelloWorld" -PropertyKey "description" -PropertyValue "My web part"
# Update all pages
Update-CCWebpartProperties -SiteURL https://contoso.sharepoint.com -WebPartIdentity "HelloWorld" -PropertyKey "description" -PropertyValue "My web part"
# Update by web part Id
Update-CCWebpartProperties -SiteURL https://contoso.sharepoint.com -WebPartIdentity "6f53d9afa5e347db90e63d6eab04b78c" -PropertyKey "description" -PropertyValue "My web part"
# Update more than one property using object
$link = @{
title = "Environment"
url = "$siteAbsoluteUrl/SitePages/Environment.aspx"
iconName = "DocLibrary"
}
Update-CCWebpartProperties -SiteURL https://contoso.sharepoint.com -WebPartIdentity "Links" -PropertyValue $link
#>
Contributors
| Author(s) |
|---|
| Ramin Ahmadi |
Disclaimer
THESE SAMPLES ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
Tool documentation & references
- Want to learn more about PnP PowerShell and the cmdlets
Check out the PnP PowerShell site to get started and for the reference to the cmdlets.