Add multiple users to multiple groups from one imp

2019-01-26 16:33发布

问题:

I have a csv with 2 columns, one column is AD group names and one is user account names. I am trying to read the csv and import the users into their corresponding group.

Here is what i have to so far. It's saying both arguments(identity,member) are null, which makes no sense since the headers are correctly specified.

import-module activedirectory
$list = import-csv "C:\Scripts\Import Bulk Users into bulk groups\bulkgroups3.csv"

Foreach($user in $list){       
    add-adgroupmember -identity $_.Group -member $_.Accountname
}

Heres whats in the csv file

Group             Accountname 
group1            user1 
group1            user2 
group1            user3 
group2            user4 
group2            user5 
group3            user6 
group3            user7 
group3            user8 
group4            user9 
group5            user10 

EDIT Command and error

Here is my script, error i receive and csv.

Import-Csv "C:\Scripts\Import Bulk Users into bulk groups\bulkgroups.csv" | 
ForEach { get-aduser $_.Accountname | add-adgroupmember $_.Group}

回答1:

Change this:

add-adgroupmember -identity $_.Group -member $_.Accountname

To this:

add-adgroupmember -identity $user.Group -member (Get-ADUser $user.Accountname)


回答2:

@EBGreen has answered what's wrong with your code. Just coming up with an alternative here. Instead of running the command once per member, you can try to add all members of a group at the same time. The Member parameter supports an array, so try this:

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
}

EDIT I've sucessfully tested this on 2012 DC with following content in test.csv (values represent existing group name and existing samaccountname/username):

Group,Accountname
"Mytestgroup","kim_akers"
"Mytestgroup","user1"

EDIT2 It shouldn't have any problems with deeper level OUs. I tested with an OU that was 7 levels deep and it had no problem. If you have all the user inside one OU (or find the closest OU that contains all the sub-OUs), see if this script helps. Remember to replace DN for "base OU" in -Searchbase parameter.

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 -Searchbase "OU=mybaseou,OU=test,OU=users,OU=contoso,DC=Contoso,DC=com" -Filter { samaccountname -eq $_.Accountname } }
    Add-ADGroupMember -Identity $_.Name -Member $users
}