Forum Discussion
How to create Repost Page (Modern Page Library) with PowerShell
- Oct 12, 2018
Dear all,
I finally found how to do the Repost Page Creation with CSOM only.
The missing parts were the page layout to load correctly the page in edit mode, the PromotedState to be sure it will be considered as a news and the last ID to know exactly the target:
- ["_OriginalSourceSiteId"]
- ["_OriginalSourceWebId"]
- ["_OriginalSourceListId"]
- ["_OriginalSourceItemId"]
The code has to be similar to the following one:
$NewPageitem["ContentTypeId"] = "0x0101009D1CB255DA76424F860D91F20E6C4118002A50BFCFB7614729B56886FADA02339B00874A802FBA36B64BAB7A47514EAAB232"; $NewPageitem["PageLayoutType"] = "RepostPage" $NewPageitem["PromotedState"] = "2" $NewPageitem["Title"] = $CSVItem.NewsTitle $NewPageitem["ClientSideApplicationId"] = "b6917cb1-93a0-4b97-a84d-7cf49975d4ec" $NewPageitem["_OriginalSourceSiteId"] = $MyDestinationPageSiteColl.ID $NewPageitem["_OriginalSourceWebId"] = $MyDestinationPageweb.ID $NewPageitem["_OriginalSourceListId"] = $MyDestinationPagelist.ID $NewPageitem["_OriginalSourceItemId"] = $MyDestinationPageFileitem["UniqueId"].ToString() $NewPageitem["_OriginalSourceUrl"] = $MyCSVNewsURL $NewPageitem["Editor"] = $MyEditoruserAccount.Id $NewPageitem["Author"] = $MyEditoruserAccount.Id $NewPageitem["Description"] = $MyCSVNewsDescription $NewPageitem["BannerImageUrl"] = $MyCSVNewsPictureURL; $NewPageitem["Modified"] = $MyCSVPublishingDate; $NewPageitem["Created"] = $MyCSVPublishingDate; $NewPageitem["Created_x0020_By"] = $MyEditoruserAccount.LoginName $NewPageitem["Modified_x0020_By"] = $MyEditoruserAccount.LoginName $NewPageitem["FirstPublishedDate"] = $MyCSVPublishingDate; $NewPageitem.Update(); $MyctxTemp.Load($NewPageitem); $MyctxTemp.ExecuteQuery();
It's now working perfectly and the only point i'm fighting with is the picture display.
Thanks a lot for your help
Fab
Hey Fabrice,
I would recommend using PnP PowerShell as it has built-in methods to create and manipulate modern pages. The approach you've outlined assumes you've constructed the correct HTML for the canvascontent1 field...which is quite hard to do...The PnP team has built an API to manipulate modern pages and that API is also available via a series of PnP Powershell cmdlets.
Checkout https://hangconsult.com/2017/11/05/creating-a-new-client-side-page-with-pnp-powershell/ to get a view on how PnP Powershell can help you. When it comes to creating the web part properties JSON the easiest approach is to configure your web part using the WorkBench (_layouts/workbench.aspx), clicking on "***Web part data" and then copying the contents from the webPartData node.
- FromelardOct 11, 2018Iron Contributor
Thanks a lot Bert for your message.
I looked the option to use the PnP to create that Repost Page, but the command available into PnP is not supporting the Repost Content Type
$page = Add-PnPClientSidePage -Name $pagename -LayoutType HomeThe layouts are talking only the model to use into the modern page (Site Page), but the Repost is a dedicated Content Type.
This is why I started with the basic CSOM command instead.
Fab
- BertJansenOct 11, 2018
Microsoft
Adding content type support when provisioning client side pages is something we do have in the PnP backlog...but in the meanwhile did you try the following:
- create page using default content type
- switch content type using set-pnplistitem (see https://docs.microsoft.com/en-us/powershell/module/sharepoint-pnp/set-pnplistitem?view=sharepoint-ps)
- FromelardOct 12, 2018Iron Contributor
Dear all,
I finally found how to do the Repost Page Creation with CSOM only.
The missing parts were the page layout to load correctly the page in edit mode, the PromotedState to be sure it will be considered as a news and the last ID to know exactly the target:
- ["_OriginalSourceSiteId"]
- ["_OriginalSourceWebId"]
- ["_OriginalSourceListId"]
- ["_OriginalSourceItemId"]
The code has to be similar to the following one:
$NewPageitem["ContentTypeId"] = "0x0101009D1CB255DA76424F860D91F20E6C4118002A50BFCFB7614729B56886FADA02339B00874A802FBA36B64BAB7A47514EAAB232"; $NewPageitem["PageLayoutType"] = "RepostPage" $NewPageitem["PromotedState"] = "2" $NewPageitem["Title"] = $CSVItem.NewsTitle $NewPageitem["ClientSideApplicationId"] = "b6917cb1-93a0-4b97-a84d-7cf49975d4ec" $NewPageitem["_OriginalSourceSiteId"] = $MyDestinationPageSiteColl.ID $NewPageitem["_OriginalSourceWebId"] = $MyDestinationPageweb.ID $NewPageitem["_OriginalSourceListId"] = $MyDestinationPagelist.ID $NewPageitem["_OriginalSourceItemId"] = $MyDestinationPageFileitem["UniqueId"].ToString() $NewPageitem["_OriginalSourceUrl"] = $MyCSVNewsURL $NewPageitem["Editor"] = $MyEditoruserAccount.Id $NewPageitem["Author"] = $MyEditoruserAccount.Id $NewPageitem["Description"] = $MyCSVNewsDescription $NewPageitem["BannerImageUrl"] = $MyCSVNewsPictureURL; $NewPageitem["Modified"] = $MyCSVPublishingDate; $NewPageitem["Created"] = $MyCSVPublishingDate; $NewPageitem["Created_x0020_By"] = $MyEditoruserAccount.LoginName $NewPageitem["Modified_x0020_By"] = $MyEditoruserAccount.LoginName $NewPageitem["FirstPublishedDate"] = $MyCSVPublishingDate; $NewPageitem.Update(); $MyctxTemp.Load($NewPageitem); $MyctxTemp.ExecuteQuery();
It's now working perfectly and the only point i'm fighting with is the picture display.
Thanks a lot for your help
Fab