0

我正在尝试使用 Add-UnifiedGroupLinks 批量加载 Office 365 组,如果仅将一个值作为字符串传递但该命令支持逗号分隔列表,则该组有效。但是,当将逗号分隔的字符串传递给它时,它会返回“找不到对象”user1@domain.com,user2@domain.com”

我可以通过一次只运行一个用户来让它工作,但它要慢得多,并且基于大量用户并不能真正满足我的需求。我可以获取我构建的字符串并从中复制和粘贴,然后手动运行同一行代码,它可以正常工作。我也试过一次只有 3 或 5 个用户,但同样的问题。

$sb = New-Object System.Text.StringBuilder
$i = 1
Import-CSV "myCSV.csv" | ForEach-Object {
    [void]$sb.Append($_.UserPrincipalName + ',')
    if($i -eq 20) {
        $sb.Length--
        Add-UnifiedGroupLinks –Identity "MyGroupName" –LinkType Members –Links $sb.ToString()
        Write-Host $sb.ToString()
        $sb.Clear()
        $i = 1
        }
        Else {$i++}
    }

注意:我有额外的代码来处理循环运行后的剩余部分,但与手头的问题无关。

它返回Couldn't find object "user1@domain.com,user2@domain.com"。但是,如果我手动运行此行,它可以工作:

Add-UnifiedGroupLinks –Identity "MyGroupName" –LinkType Members –Links user1@domain.com,user2@domain.com

或者,如果我一次做一个,它会起作用:

Import-CSV "myCSV.csv" | ForEach-Object {
Add-UnifiedGroupLinks –Identity "MyGroupName" –LinkType Members –Links $_.UserPrincipalName
}

但是当使用超过 20K 用户时,最后一个选项的性能很糟糕,平均每小时大约 400 个(每 9 秒左右一个)。

4

1 回答 1

0

而不是使用字符串生成器,我应该使用一个字符串数组并将其传递给:

$strArr = New-Object System.Collections.ArrayList
Import-CSV "myCSV.csv" | ForEach-Object {
    $strArr.Add($_.UserPrincipalName) > $null
    if($strArr.Count -eq 100) {
        Add-UnifiedGroupLinks –Identity "MyGroupName" –LinkType Members –Links $strArr
        $strArr.Clear()
        }
    }
Add-UnifiedGroupLinks –Identity "MyGroupName" –LinkType Members –Links $strArr
于 2019-05-30T16:28:18.027 回答