Description
Requirement is to create Modern pages with content, which includes images and text.
The Content is in SharePoint List. The pages are created from a Page Template.
To get Text part from Page template, use below PowerShell,
#get page textpart instance id
$parts=Get-PnPPageComponent -Page <pagename.aspx>
Execute the below PowerShell to create pages with HTML content from SharePoint List.
$logFile = "Logs\LogFile.log"
Start - Transcript - Path $logFile - Append
#Variables
$libName = "Site Pages"
$siteURL = "https://tenant.sharepoint.com/"
$contentType = "Group and Division Page"
$listname = "Content"
$sectionCategoy = "Our organisation"
#End
Try {
#Connect to PnP Online
$connection = Connect - PnPOnline - Url $siteURL - UseWebLogin - ReturnConnection - WarningAction Ignore
#Get items from Content list
$items = Get - PnPListItem - List $listName - PageSize 100
foreach($item in $items) {
if ($null - ne $item["Title"] - and $null - ne $item["Content"]) {
#Get Page webparts instance Id
#$parts = Get - PnPPageComponent - Page PageTemplate.aspx
# load the page template
$template = Get - PnPClientSidePage - Identity "Templates/Division-page-template"
#Get page name
$fullFileName = $item["Title"].Replace(" ", "_") + ".aspx"
#Create fileURL
$fileURL = $siteURL + $libName + "/" + $fullFileName
# save a new SharePoint Page based on the Page Template
$template.Save($fullFileName)
$page = Get - PnPPage - Identity $fullFileName
$htmlToInject = $item["Content"]
$htmlToInject = $htmlToInject.TrimStart('{"Html":"').TrimEnd('"}') - replace([regex]::Escape('\n')), '' - replace([regex]::Escape('<a href=\')),' < a href = ' -replace ([regex]:: Escape('\
">')),'" > ' -replace ([regex]::Escape(' & bull; % 09 ')),'
' -replace '
https:
/*','https://'
#Set PnP Page Text
Set-PnPPageTextPart -Page $page -InstanceId "9fab3ce6-0638-4008-a9b9-cf2b784245b5" -Text $htmlToInject
#publish page
Set-PnPPage -Identity $fullFileName -Title $item["Title"] -ContentType $contentType -Publish
#get site pages library
$sitepagelist= Get-PnPList -Identity 'Site Pages'
#get page Id and page Item to update section category
$pageItem=Get-PnPListItem -List $sitepagelist -Id $page.PageId
Set-PnPListItem -Values @{"SectionCategory" = $sectionCategoy} -List $sitepagelist -Identity $pageItem
}
else
{
Write-Host "Title or Content has no value"
}
}
}
Catch {
Write-Host "Error: $($_.Exception.Message)" -Foregroundcolor Red
}
Stop-Transcript