powershell - 从字符串向 SharePoint peoplepicker 添加多人 - 转换为对象
问题描述
我需要将字符串转换为命令“Add-PnPListItem”的对象。
我有一个包含多个邮件地址的 Excel 列表,我想将其添加到 SharePoint Online PeoplePicker 字段中。(https://docs.microsoft.com/en-gb/powershell/module/sharepoint-pnp/add-pnplistitem?view=sharepoint-ps)
关于文档,格式需要用引号和逗号分隔: Person/Group(站点用户信息列表中用户/组的ID或用户的电子邮件,用逗号分隔多个值):-Values @{"人" = "user1@domain.com","21"}
我的问题是,如果我从列表中读取数据,它是一个字符串。(根据需要的格式。)作为示例"mail@test.com","mail2@test.com"
。
该命令返回错误"Add-PnPListItem : The specified user could not be found."
也许为了更清楚:
$Members = $WorkSheet.Range("G$i").Value2 #= "mail@test.com","mail2@test.com"
$test = "mail@test.com","mail2@test.com"
Add-PnPListItem -List List -Values @{"Members" = "$Members"} #does not work
Add-PnPListItem : The specified user "mail@test.com","mail2@test.com" could not be found.
Add-PnpListItem -List List -Values @{"Members" = "$test"} #works
如果我直接在我的 Powershell 中以所需的格式键入上面的字符串,它会按方面工作。
我测试了通过 Add-Member 创建自定义对象以及具有 Split 功能的 ArrayList,但不知道如何解决我的问题。
到目前为止我的代码:
for ($i=2; $i -le $LastRowInExcel; $i++) {
$ProjectNo = $WorkSheet.Range("A$i").Value2 #SingleLineOfText
$ProjectName = $WorkSheet.Range("B$i").Value2 #URL Field combined with ProjectSiteUrl
$ProjectSiteUrl = $WorkSheet.Range("C$i").Value2 #URL Field combined with ProjectName
$Client = $WorkSheet.Range("D$i").Value2 #Choice
$ProjectManager = $WorkSheet.Range("E$i").Value2 #PeoplePicker - Input via Email
$Director = $WorkSheet.Range("F$i").Value2 #PeoplePicker - Input via Email
$Members = $WorkSheet.Range("G$i").Value2 #PeoplePicker - Input via Email
#Example that works:
$test = "mail@test.com","mail2@test.com"
#$Object = New-Object PSObject
#$Object | Add-Member NoteProperty "Member" $Members
#[System.Collections.ArrayList]$MyAL = @()
#$Members.Split(",") | ForEach {
#$MyAL.Add($_)}
Add-PnPListItem -List $listName -Values @{"Title"=$ProjectNo; `
"ProjectNameWithLink"="$ProjectSiteUrl, $ProjectName"; `
"ProjectName"="$ProjectName"; `
"ClientLookup"="$Client"; `
"Manager"="$ProjectManager"; `
"Director"="$Director"; `
"Members" = "$Members"; `
"Start"="$StartDate"; `
"End"="$EndDate"; `
"OfficeLookup"="$Office"; `
"TypeLookup"="$ProjectType"; `
"StatusLookup"="$ProjectStatus"; `
"subsiteCreated"="$SubsiteCreated"; `
"ProjectStructureType"="$ProjectStructureType"; `
"AlertSend"="$AlertSend"; `
"TSISite"=$false; `
"Planner"=$false; `
"Team"=$false; `
"PMChecklist"=$false; `
"PermGroupIdContr"="$PermGroupID"; `
"PermGroupIdRead"="$PermGroupRead"}
}
解决方案
$test = "mail@test.com","mail2@test.com"
创建一个字符串项数组,而不是一个字符串。如果您的 Excel 工作表输出类似 的字符串""mail@test.com", "mail2@test.com""
,您可以通过在逗号处拆分并修剪它来创建该数组。
$Members = $WorkSheet.Range("G$i").Value2.Split(',').Trim()
这将创建一个字符串数组,就像$test
PnP 命令应该接受的那样。
如果您需要从 Excel 字符串中删除引号:
$Members.Replace('"', '')
推荐阅读
- javascript - JavaScript 类中的“this”为什么会抛出这个错误?
- python - 在列表中追加字典 - python
- sql - SQL 查询耗时太长,甚至没有响应
- java - 如何修复tomcat9中“不支持的类文件主要版本60”?
- python - Colab 运行时在几分钟内断开连接
- reactjs - 如何解决文本输入中的文本光标在插入键入的字符后自动放置在输入末尾的问题?
- azure - Azure VM -> 灾难恢复选项卡 -> 显示错误页面
- java - 使用mybatis executortype.batch时如何查找错误的参数一次插入批处理
- json - 从数据库导出到 JSON 文件
- javascript - 如何通过 JavaScript 从包含通过术语库存储值的列的 SharePoint 列表中获取值?