首页 > 解决方案 > 从字符串向 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"}
    
                             
}

标签: powershell

解决方案


$test = "mail@test.com","mail2@test.com"创建一个字符串项数组,而不是一个字符串。如果您的 Excel 工作表输出类似 的字符串""mail@test.com", "mail2@test.com"",您可以通过在逗号处拆分并修剪它来创建该数组。

$Members = $WorkSheet.Range("G$i").Value2.Split(',').Trim()

这将创建一个字符串数组,就像$testPnP 命令应该接受的那样。

如果您需要从 Excel 字符串中删除引号:

$Members.Replace('"', '')

推荐阅读