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多个命令行参数来做什么…

(我希望如果这是可能的,我可以传递一个数组或集合的对象被添加。)

有什么build议么? 我没有看到一个叫做“set-distributiongroupmember”的命令,而且在“set-distributiongroup”中也看不到任何有希望的东西。

我不知道为什么你不想使用循环结构; 这是PS的主要特点之一。 一个简单的:

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

很容易做到这一点。 如果没有,那么没有cmdlet可以完成你想要的function。 你可以做一个

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

但这有点俗气。

通过创build文本文件成功填充通讯组,然后填充成员帐户别名,然后执行以下命令:

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

查看这些url获取更多详情:

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

Get-Content | 添加-DistributionGroupMember

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

不知道为什么微软的团队这么复杂。 有时你只需要简单思考。

 "user1","user2","user3" | Add-DistributionGroupMember -Identity "SomeMailbox" 

看起来,Quest Active Directory PowerShell Cmdlet可以在此Wiki页面上一次将多个用户添加到一个组中。 在我的简短testing中,我能够使用Add-QADGroupMember cmdlet将一小群用户添加到Active Directory中的testing组。

添加AD可能也有帮助:

import-module ActiveDirectory

然后只使用:

Add-AdgroupMember MyList -member user.alias,user2.alias,user3.alias,...

为此,您需要安装RSAT(MS产品,并免费),否则将无法正常工作。

如果性能是一个问题,那么Add-ADGroupMember是迄今为止最快的,正如前面提到的,可以将一个数组作为-Member参数的input。

类似的东西,不知道这是写得好还是工作 – 只是一个想法。

 Function Add-DistributionGroupMembers_Safe { Param ( [Parameter(Mandatory=$true)] [String]$Identity, [Parameter(Mandatory=$true)] [String[]]$Member ) $local:groupADSI = [ADSI]"LDAP://${$(Get-DistributionGroup -Identity $Identity).DistinguishedName}" $local:DGUsers = @( @( Get-DistributionGroupMember -Identity $Identity ).Name ) $local:UsersToAdd = @( $Member | Where-Object { $local:DGUsers -notcontains $_ } | ForEach-Object { return (Get-ADUser -Name $_}).DistinguishedName ) ForEach ($user in $local:UsersToAdd) { try { $local:GroupADSI.Properties["member"].Add($user) | Out-Null } catch { #Error processing, text in $_.Exception.Message } } $group.CommitChanges() }