Ошибка передачи разделенной запятыми строки в Add-UnifiedGroupLinks, повторяющуюся в ошибке «Не удалось найти объект» - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь выполнить групповую загрузку группы Office 365 с помощью Add-UnifiedGroupLinks, которая работает, если передается только одно значение в виде строки, но команда поддерживает список через запятую. Однако при передаче строки через запятую возвращается «Не удалось найти объект» 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
}

, но при последней опции производительность ужасна, когда для пользователей более 20 000 это в среднем около 400 в час (по одному каждые 9 секунд или около того).

1 Ответ

0 голосов
/ 30 мая 2019

Вместо использования String Builder я должен был использовать Array of Strings и передать его в:

$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
...