Powershell 2:通过一次调用将多个成员添加到通讯组?

Powershell 2:通过一次调用将多个成员添加到通讯组?

假设我在 Exchange 中有一个当前存在的通讯组,并且拥有大约 20 名成员。

在 Powershell 2 中,我获取了大约七个需要将更多个人添加到组中。我能够做到这一点的唯一方法是一次添加一个用户:

Add-DistributionGroupMember -Idneity GROUP-NAME -Member Member1
Add-DistributionGroupMember -Idneity GROUP-NAME -Member Member2
....
Add-DistributionGroupMember -Idneity GROUP-NAME -Member MemberN

是否存在一种机制允许我只通过一个函数调用来添加所有用户,如下面的伪代码所示?

SOME-CMDLET-TO-ADD-LOTS-AT-ONCE -Identity GROUP-NAME -Member COLLECTION-OF-PEOPLE

我不是在寻找循环结构。我正在寻找一个可以一次添加所有成员的函数或 cmdlet,理想情况下只接受一个引用整个列表的参数。我不敢想象 Powershell 会用 700 多个命令行参数做什么……

(我希望如果可能的话,我可以传递要添加的数组或对象集合。)

有什么建议吗?我没有看到名为“set-distributiongroupmember”的命令,也没有在“set-distributiongroup”中看到任何有希望的东西。

答案1

我不确定你为什么不想使用循环构造;这有点像 PS 的主要功能之一。简单来说:

Import-CSV FileName.csv | ForEach {Add-DistributionGroupMember -Identity "GROUP-NAME" -Member $_.Name}

很容易就能达到目的。但是,如果做不到这一点,就没有 cmdlet 可以完全满足您的要求。您可以执行

Remove-DistributionGroup GROUP-NAME; New-DistributionGroup -Name GROUP-NAME -Members memberlist

但这有点俗气。

答案2

我知道这是一篇旧帖子,但当我尝试查找如何向 DL 添加多个用户时,它仍然是 Google 上的第一条搜索结果,所以我想我会发布我的解决方案。

先前的解决方案对于一小部分用户来说效果很好,但正如原始海报所述,Add-DistributionGroupMember在处理大量成员变更时调用每个成员存在性能和扩展问题,而在处理 O365 时,这个问题会变得更加严重。

为了解决这些问题,您可以使用Update-DistributionGroupMember替换 DL 的整个成员资格,而不是逐个添加它们。

例如对于原始请求你可以这样做:

Update-DistributionGroupMember -Identity GroupName -Members user1@domain,user2@domain,usern@domain

或者

Update-DistributionGroupMember -Identity GroupName -Members $ArrayOfMemberEmailAddresses

这确实取代了 DL 的成员资格,因此如果您想维护现有成员资格,则需要先使用它来检索它,Get-DistributionGroupMember然后创建现有成员和新成员的数组,并将其提供给Update-DistributionGroupMember以下内容:

$NewMembers = Get-Content <path to member list text file>
$CurrentMembers = (Get-DistributionGroupMember -Identity GroupName).PrimarySmtpAddress | where {$_ -ne ""}
$NewMemberList = $CurrentMembers + $NewMembers
Update-DistributionGroupMember -Identity GroupName -Members $NewMemberList -Confirm:$false

最后,如果您尝试像我一样在 O365 中更新大量 DL 的成员资格,那么您可以Update-DistributionGroupMember在循环中的命令中添加 -AsJob 开关,以便它并行运行所有更新,而不是等待每个成员资格更新完成后再继续。这将大大加快您的脚本速度,但如果您还不熟悉 PowerShell 远程处理和使用作业,请务必先阅读一些有关它们的内容,因为之后您还需要做一些额外的工作才能获得结果、检查错误等。

通过这种方式,可以将Add-DistributionGroupMember发送给 O365 进行 DL 迁移的命令数量从大约 150K 减少到大约 2.5K,并将迁移 1200 个 DL 成员资格的脚本运行时间从多天减少到一个晚上。

答案3

通过创建文本文件、填充成员帐户别名,然后执行以下命令,成功填充了分发组:

% Get-Content <path\filename.txt> | Add-DistributionGroupMember "<Display Name of Distribution Group>"

请参阅以下 URL 以了解更多详细信息:

答案4

试试这个,它似乎对我有用:

获取内容 | 添加分发组成员

文本文件只包含您要添加的用户的别名。

相关内容