PowerShell to Update Multi-valued People Picker Field with New Users
Requirement: Update existing People Picker field value using PowerShell in SharePoint.
PowerShell to add a new user to the existing People Picker field:
We have a field called “Team Members” in the Projects list and wanted to add new member(s) to it for a particular list item.
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#Configuration parameters
$SiteURL = "https://portal.crescent.com/projects/"
$ListName = "Projects"
$FieldName= "ProjectTeamMembers"
$UserToAdd="Crescent\Faris"
$ItemID=431
#Get site and List objects
$web = Get-SPWeb $SiteURL
$List = $web.Lists.TryGetList($ListName)
if($List -ne $null)
{
#Get the Item
$Item = $List.GetItembyID($ItemID)
#Get Existing field value
$MultiUserCollection = [Microsoft.SharePoint.SPFieldUserValueCollection]$item[$FieldName]
#Prepre the user to add
$User = $Web.EnsureUser($UserToAdd)
$NewUser = new-object Microsoft.SharePoint.SPFieldUserValue($Web, $User.ID, $User.LoginName)
#Update Multivalued people Picker field
$MultiUserCollection.Add($NewUser)
$item[$FieldName] = $MultiUserCollection
$item.update()
}
write-host "New User Added and Existing People Picker field value updated!"
How to Set the People Picker Field using PowerShell?
The above script updates the existing people picker field value with new users, and this one sets the people picker field without updating existing values in it.
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#parameters
$SiteURL = "https://portal.crescent.com/projectpipeline/"
$ListName = "Projects"
$FieldName= "ProjectMembers"
[email protected]("Crescent\Markb", "Crescent\Andrew")
#Get site and List objects
$web = Get-SPWeb $SiteURL
$List = $web.Lists.TryGetList($ListName)
#Get the Item
$Item = $List.GetItembyID(1)
Write-Host "Processing: "$item["ProjectName"]
#Object Array for People picker value
$TeamMembersCollection = new-object Microsoft.SharePoint.SPFieldUserValueCollection
#Add Each Team member to the array
foreach ($TeamMember in $TeamMembers)
{
#Prepre the user to Add
$User = $Web.EnsureUser($TeamMember)
#Add new user to the collection
$NewUser = new-object Microsoft.SharePoint.SPFieldUserValue($Web, $User.ID,$User.Name)
$TeamMembersCollection.Add($NewUser)
}
#Update the field value
$item[$FieldName] = $TeamMembersCollection
$item.update()
write-host "Team Member Field updated!"