Per aggiornare un campo multi utente di SharePoint Online è necessario usare il Client Side Object Model (CSOM) .

Quello che segue è un esempio in PowerShell per aggiungere un item.
Prima di tutto vanno caricati riferimenti alle DLL necessarie:

PowerShell

#carico le DLL necessarie https://www.microsoft.com/en-us/download/details.aspx?id=42038
$csomPath="C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell"
Add-Type -Path "$csomPath\Microsoft.SharePoint.Client.dll"
Add-Type -Path "$csomPath\Microsoft.SharePoint.Client.Runtime.dll"
Add-Type -Path "$csomPath\Microsoft.Online.SharePoint.Client.Tenant.dll"
poi va letta la password dell'utente con cui collegarsi (Read-Host) e costruito l'oggetto contenente le credenziali (SharePointOnlineCredentials):

PowerShell

# sito a cui collegarsi
$siteURL = "https://sharepoint.sgart.local/sito1"
# utente con cui collegarsi
$username = "utente@sgart-local.onmicrosoft.com"
# leggo la password dalla console
$password = Read-Host "Please enter the password for $($userName)" -AsSecureString
# imposto le credenziali di SharePoint Online
$SPOCredentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($userName, $password)

successivamente creo il contesto con le corrette credenziali e leggo il l'oggetto web:

PowerShell

# creo l'oggetto con il contesto client
$context = New-Object Microsoft.SharePoint.Client.ClientContext($siteURL)
$context.credentials = $SPOCredentials
# accede all'oggetto web corrente e lo carico nel contesto 
$web = $context.web
$context.Load($web);
Nel modello client CSOM gli oggetti caricati nel contesto non sono accessibili finchè non viene invocato il metodo ExecuteQuery() del contesto ($context).

accedo agli items (GetItems) delle lista (Lists.GetByTitle), se serve con una query CAML specifica (CamlQuery):

PowerShell

$listTitle = "ListaProva"   #nome della lista
$list = $web.Lists.GetByTitle($listTitle)

$query = @"
<View>
    <ViewFields>
    <FieldRef Name="AnnoRiferimento" />
    <FieldRef Name="Title" />
    <FieldRef Name="Login1" />
    <FieldRef Name="Login2" />
    </ViewFields>
    <Query>
    <Where>
        <Eq><FieldRef Name='AnnoRiferimento'/><Value Type='Number'>2018</Value></Eq>
    </Where>
    </Query>
    <RowLimit>2000</RowLimit>
</View>
"@;
$query = new-object Microsoft.SharePoint.Client.CamlQuery
$query.ViewXml = $ViewXml
$items = $list.GetItems($query);
$context.Load($items);

inserisco un nuovo item ( Microsoft.SharePoint.Client.ListItemCreationInformation ) con un campo user multiplo ( Microsoft.SharePoint.Client.FieldUserValue[] ):

PowerShell

# array di utenti da aggiungere al campo multi utente
$usersMulti = @("user1@sgart-local.onmicrosoft.com", "user2@sgart-local.onmicrosoft.com", "user3@sgart-local.onmicrosoft.com")

$itemCreateInfo = new-object Microsoft.SharePoint.Client.ListItemCreationInformation
$newItem = $list.AddItem($itemCreateInfo)
# imposto anche altri campi
$newItem["AnnoRiferimento"] = 2018
$newItem["Title"] = "titolo"

# preparo l'oggetto per popolare il campo multi user
$loginReaders = @();
$userMulti | ForEach-Object { 
	$email = $_
	if( [string]::IsNullOrWhiteSpace($email) -eq $false ){
		# risolvo l'utente e popolo l'oggetto $r
		$r = $web.EnsureUser($email)
		$context.Load($r)  
		$context.ExecuteQuery()

		$obj = new-object Microsoft.SharePoint.Client.FieldUserValue
		$obj.LookupId = $r.Id
		$loginReaders += $obj
	}
}
# lo setto facendo il cast
$newItem["Login1"] = [Microsoft.SharePoint.Client.FieldUserValue[]]$loginReaders

# esempio con un campo singolo utente
$loginNominativo = $web.EnsureUser("user4@sgart-local.onmicrosoft.com")   
$context.Load($loginNominativo)  
$newItem["Login2"] = $loginNominativo

# lo aggiorno
$newItem.Update();
# lo carico nel contesto
$context.Load($newItem)
# eseguo il comando su SharePoint OnLine
$context.ExecuteQuery()

l'utente, prima di essere assegnato al campo, deve esserene verifica l'esistenza tramite il metodo '$web.EnsureUser( email ).
per funzionare è necessario che sulla macchina su cui gira lo script sia installato lo SharePoint Online Client Components SDK
Tags:
CAML17 Client Object Model10 CSOM9 PowerShell200 SharePoint498 SharePoint 201668 SharePoint Online75
Potrebbe interessarti anche: