从一个导入csv将多个用户添加到多个组(跟进查询)

时间:2014-01-20 04:41:25

标签: powershell csv import active-directory bulk

我一直在寻找一种方法来填充多个用户名的多个通讯组。我遇到了a script on this site written by member Frode F.

Import-Csv "C:\Scripts\Import Bulk Users into bulk groups\bulkgroups3.csv" | Group-Object Group | % {
    #Foreach Group, get ADUser object for users and add members
    $users = $_.Group | % { Get-ADUser $_.Accountname }
    Add-ADGroupMember -Identity $_.Name -Member $users
}

当csv文件包含大约10行,第1列中有2个不同的组,第2列中有多个用户时,这是有效的。 当csv包含几百行时,仍然只有两个组,它根本无法填充这些组。这些是错误:

Add-ADGroupMember : The specified account name is already a member of the group
At C:\scripts\AddUsersDistributionGroups.ps1:6 char:22
+     Add-ADGroupMember <<<<  -Identity $_.Name -Member $users
    + CategoryInfo          : NotSpecified: (Group A:ADGroup) [Add-ADGroupMember], ADException
    + FullyQualifiedErrorId : The specified account name is already a member of the group,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember

Add-ADGroupMember : The specified account name is already a member of the group
At C:\scripts\AddUsersDistributionGroups.ps1:6 char:22
+     Add-ADGroupMember <<<<  -Identity $_.Name -Member $users
    + CategoryInfo          : NotSpecified: (Group B:ADGroup) [Add-ADGroupMember], ADException
    + FullyQualifiedErrorId : The specified account name is already a member of the group,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

或许 Add-ADGroupMember 可以同时处理多少成员,并且如果您将 -Members 参数传递给数百个集合,它就会出现问题?不要将所有用户分组到集合中,而是尝试一次添加一个:

Import-Csv "C:\Scripts\Import Bulk Users into bulk groups\bulkgroups3.csv" | %{
    Add-ADGroupMember -Identity $_.Group -Members $_.Accountname
}

这假定群组帐户名列中的值是有效的身份属性 - 他们必须按照您引用的脚本的顺序。但请注意,此脚本需要很长时间才能运行,因为AD cmdlet通常运行缓慢,并且您将每个用户执行一次 Add-ADGroupMember (即CSV中的每行)文件)而不是每组一次。您可能会发现在 Foreach-Object 块中添加一行指示进度非常有用,这样您就知道它正在工作而不是卡住。

答案 1 :(得分:0)

我遇到了同样的问题,通过Add-ADGroupMember添加多个成员,我想我找到了解决方案。以为我会为后人分享。

它与可以处理的成员数量的限制无关...... cmdlet可以处理数千个。

问题是通过-MEMBERS参数传递的成员列表不能有重复项。如果该列表中有重复项,则我们会收到上述错误。

决议?要么传递干净的数据而不使用dupe,要么使用foreach参数一次传递一个成员。