Forum Discussion
Darren Parkinson
Sep 26, 2017Brass Contributor
Adding People to the People Web Part Programmatically (using PowerShell maybe?)
There doesn't seem to be any documentation relating to the modern web part components.
I can add a modern web part component to the page like this:
Add-PnPClientSideWebPart -Page $home -DefaultWebPartType People
But I cannot work out how to actually add people to it.
Any thoughts greatfully received (although I don't hold out much hope -- it's very quiet around here).
Hi Darren Parkinson,
I ran Get-PnPProvisioning Template before adding a people web part
Then I added a people web part and then ran Get-PnPProvisioningTemplate again
The difference is :
<pnp:CanvasControl WebPartType="People" JsonControlData="{"layout":1,"persons":[{"id":"i:0#.f|membership|pieter@mytenant.onmicrosoft.com","role":""}]}" ControlId="7f718435-ee4d-431c-bdbf-9c4ff326f46e" Column="1" />
On the Add-PnPClientSideWebPart I couldn't find anything to add the data, but you could create a template whcih just includes the above webpart details and then add the web part with Apply-ProvisioningTemplate.
Hi Darren Parkinson,
I ran Get-PnPProvisioning Template before adding a people web part
Then I added a people web part and then ran Get-PnPProvisioningTemplate again
The difference is :
<pnp:CanvasControl WebPartType="People" JsonControlData="{"layout":1,"persons":[{"id":"i:0#.f|membership|pieter@mytenant.onmicrosoft.com","role":""}]}" ControlId="7f718435-ee4d-431c-bdbf-9c4ff326f46e" Column="1" />
On the Add-PnPClientSideWebPart I couldn't find anything to add the data, but you could create a template whcih just includes the above webpart details and then add the web part with Apply-ProvisioningTemplate.
- Darren ParkinsonBrass Contributor
Woot! Finally managed it. It's just so frustrating how simple it looks when you finally work it out.
$homePage = Get-PnPClientSidePage -Identity "Home" $peoplePart = $homePage.Controls | ? {$_.Title -eq "People"} $peoplePart.PropertiesJson = '{"layout":1,"persons":[{"id":"i:0#.f|membership|dparkinson@yourtenant.com","role":""}],"title":"Account Team"}' $homePage.Save()
Note: this assumes only a single control on the page called "People"; and this also changes the title.
You can actually set the title by just using:
$peoplePart.Title = "My New Title"
$homePage.Save()But the PropertiesJson already includes it.
Thanks Pieter Veenstra your tip was very helpful in pointing the right direction. I always forget about Get-PnPProvisioning for looking at specific items.
Kind regards,
D.
- Jeremy GOUPILCopper Contributor
Thanks a lot for this information.
I would like to put 2 variables in this code. I can't find the solution.
Something like this (First time I use Json 🙂 ) :
$userMail = "dparkinson@yourtenant.com" $title = "Account Team" $homePage = Get-PnPClientSidePage -Identity "Home" $peoplePart = $homePage.Controls | ? {$_.Title -eq "People"} $peoplePart.PropertiesJson = '{"layout":1,"persons":[{"id":"i:0#.f|membership|$userMail","role":""}],"title":$title}' $homePage.Save()
I tried this but it doesn't work :
$user = "dparkinson@yourtenant.com" $title = "Account Team" $homePage = Get-PnPClientSidePage -Identity "$PageName" $peoplePart = $homePage.Controls | ? {$_.Title -eq "People"} $peoplePart.PropertiesJson = '{{"layout":1,"persons":[{"id":"i:0#.f|membership|{0}","role":""}],"title":"{1}"}}' -f $user,$title
Any idea ?
- Darren ParkinsonBrass Contributor
Interesting that it's only adding the JsonControlData field which is what I've be trying to do via PowerShell. I'll give it another go with that before giving up.