使用PnP PowerShell填充SPO多选人员字段时遇用户未找到错误
问题根源
你直接把Get-PnPAzureADUser返回的完整用户对象传给了人员字段,但Add-PnPListItem对多选人员字段的输入格式有要求——必须是用户ID数组或者带特定前缀的用户登录名字符串数组,不能直接用完整的AzureADUser对象,这才触发了"用户未找到"的错误。
修正后的可用脚本
方案1:通过用户ID填充
# 初始化存储用户ID的数组 $HRCollabs = [System.Collections.ArrayList]@() # 获取目标Azure AD用户 $testuser = Get-PnPAzureADUser -Filter { Mail eq 'test@******.com'} # 将用户ID加入数组(用$null屏蔽Add方法的索引输出) $null = $HRCollabs.Add($testuser.Id) # 新增列表项并填充字段 Add-PnPListItem -List "customlist" -Values @{HRContacts= $HRCollabs; Title = '123'}
方案2:通过用户登录名填充
# 初始化存储用户登录名的数组 $HRCollabs = [System.Collections.ArrayList]@() # 获取目标Azure AD用户 $testuser = Get-PnPAzureADUser -Filter { Mail eq 'test@******.com'} # 构造SharePoint识别的登录名格式:i:0#.f|membership|邮箱地址 $userLogin = "i:0#.f|membership|$($testuser.Mail)" # 将构造好的登录名加入数组 $null = $HRCollabs.Add($userLogin) # 新增列表项并填充字段 Add-PnPListItem -List "customlist" -Values @{HRContacts= $HRCollabs; Title = '123'}
补充提示
- 如果需要添加多个用户,重复调用
$null = $HRCollabs.Add(...)即可,数组会自动存储多个ID或登录名 - 确保目标用户已经访问过该SharePoint站点,或者被分配过站点权限(这样用户信息才会同步到站点的用户信息列表,避免找不到用户的问题)
内容的提问来源于stack exchange,提问作者John John
相关产品推荐
相关产品推荐

