无法将字符串数组转为逗号分隔字符串导致Add-PnPListItem执行失败
问题:Add-PnPListItem传入逗号分隔字符串为何执行失败?
可正常运行的代码
$r = "test2@test.com","test1@test.com" Add-PnPListItem -List "title" -Values @{ "Title" = "123"; "assi" = $r}
执行结果:
Id Title GUID -- ----- ---- 7 123 f5687010-3f8a-4dc9-848b-8c784c1af97e
报错的操作过程
$HRCollabs.Add("""test1@test.com""") $HRCollabs.Add("""test2@test.com""") $HRCollabs # 输出: # "test1@test.com" # "test2@test.com" $r = $HRCollabs -join "," Add-PnPListItem -List "title" -Values @{ "Title" = "one"; "assi" = $r}
报错信息:
Add-PnPListItem : The specified user "test2@test.com","test1@test.com" could not be found. At line:1 char:1 + Add-PnPListItem -List "title" -Values @{ "Title" = "one"; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Add-PnPListItem], PSInvalidOperationException + FullyQualifiedErrorId : InvalidOperation,PnP.PowerShell.Commands.Lists.AddListItem
原因分析
你的assi字段是SharePoint的多选人员字段,这类字段要求传入的是字符串数组(每个元素是单个用户的邮箱/登录名),而不是单个逗号分隔的字符串。
当你把数组用-join ","转成单个字符串后,Add-PnPListItem会把整个"test2@test.com","test1@test.com"当成一个用户的标识去查找,显然不存在这样的用户,所以报错。
另外你操作里的$HRCollabs数组元素还多了一层双引号(比如"test1@test.com"),这也会导致即使传递数组,系统也找不到对应用户,因为用户标识里不该包含引号。
解决方法
直接传递字符串数组,不要转成逗号分隔字符串:
# 先清理$HRCollabs里的多余引号 $HRCollabs = $HRCollabs | ForEach-Object { $_ -replace '"', '' } # 直接传数组给字段 Add-PnPListItem -List "title" -Values @{ "Title" = "one"; "assi" = $HRCollabs }如果是从头构建用户列表,直接添加纯邮箱字符串到数组:
$HRCollabs = @() $HRCollabs.Add("test1@test.com") $HRCollabs.Add("test2@test.com") Add-PnPListItem -List "title" -Values @{ "Title" = "one"; "assi" = $HRCollabs }
内容的提问来源于stack exchange,提问作者John John
相关产品推荐
相关产品推荐

