![Powershell 2:通过一次调用将多个成员添加到通讯组?](https://linux22.com/image/562906/Powershell%202%EF%BC%9A%E9%80%9A%E8%BF%87%E4%B8%80%E6%AC%A1%E8%B0%83%E7%94%A8%E5%B0%86%E5%A4%9A%E4%B8%AA%E6%88%90%E5%91%98%E6%B7%BB%E5%8A%A0%E5%88%B0%E9%80%9A%E8%AE%AF%E7%BB%84%EF%BC%9F.png)
假设我在 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
试试这个,它似乎对我有用:
获取内容 | 添加分发组成员
文本文件只包含您要添加的用户的别名。