如何通过PowerShell和MSGraphAPI将邮箱转用户GUID写入SharePoint人员字段
要让人员字段Assigned_x0020_Tech正常写入,你需要将用户主体名称(UPN)转换为符合Graph API要求的结构化格式,而非直接传入字符串。以下是具体操作步骤:
1. 获取用户的ObjectID(可选,也可直接用UPN)
若需通过UPN获取用户的Graph ObjectID,使用Get-MgUser查询(确保已通过Connect-MgGraph完成身份验证):
# 用已获取的UPN查询Graph用户 $user = Get-MgUser -Filter "userPrincipalName eq '$AssignedTech'" $userId = $user.Id
2. 修改写入参数的人员字段格式
SharePoint人员字段需传入包含用户标识的对象数组,而非纯字符串。两种可行写法:
写法一:使用ObjectID
$params = @{ fields = @{ "Title" = "$DecomServer"; "IP_x0020_Address" = "$IP"; "Assigned_x0020_Application" = "$Application"; "Domain" = "$Domain"; "Machine_x0020_Type" = "$MachineType"; "Change_x0020_Ticket_x0020_Number" = "$ChangeControl"; "Assigned_x0020_Tech" = @( @{ "@odata.type" = "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedUser" "Id" = $userId } ); "OSVersion" = "$OS"; "DateTurnedOff" = Get-Date; "RemoveDate" = (Get-Date).AddDays(60) } } New-MgSiteListItem -SiteId $siteId -ListId $listId -BodyParameter $params
写法二:直接使用UPN/Email(更简便)
若你的UPN与用户邮箱一致,可直接传入Email字段,无需额外查询ObjectID:
$params = @{ fields = @{ "Title" = "$DecomServer"; "IP_x0020_Address" = "$IP"; "Assigned_x0020_Application" = "$Application"; "Domain" = "$Domain"; "Machine_x0020_Type" = "$MachineType"; "Change_x0020_Ticket_x0020_Number" = "$ChangeControl"; "Assigned_x0020_Tech" = @( @{ "@odata.type" = "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedUser" "Email" = $AssignedTech } ); "OSVersion" = "$OS"; "DateTurnedOff" = Get-Date; "RemoveDate" = (Get-Date).AddDays(60) } } New-MgSiteListItem -SiteId $siteId -ListId $listId -BodyParameter $params
注意:若人员字段允许多选,可在数组中添加多个用户对象;单选则保留一个元素即可。
内容的提问来源于stack exchange,提问作者Mark D. MacLachlan
相关产品推荐
相关产品推荐

