# Add multiple users to AD groups from csv

**URL:** <https://forums.powershell.org/t/add-multiple-users-to-ad-groups-from-csv/15796>\
**Category:** PowerShell Help\
**Created:** [March 1, 2021, 9:35pm UTC](https://forums.powershell.org/t/add-multiple-users-to-ad-groups-from-csv/15796 "2021-03-01T21:35:53Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![r1sh](https://avatars.discourse-cdn.com/v4/letter/r/b77776/32.png) [@r1sh](https://forums.powershell.org/u/r1sh)\
**Post date:** [March 1, 2021, 9:35pm UTC](https://forums.powershell.org/t/add-multiple-users-to-ad-groups-from-csv/15796/1 "2021-03-01T21:35:53Z")

</div>

Good day.

There is a table in \* .csv format with correspondence of users to groups in AD [url] [group\_ad.csv — Yandex.Disk](https://yadi.sk/d/HlELvXDmR2eKvw) [/ url]

I created groups in AD through a similar csv file.

Caught a stupor when trying to add users to groups in accordance with the table.

The only working option I came up with is to split the table into two:

1. Table with group names [url] [groups\_example.csv — Yandex.Disk](https://yadi.sk/d/HTetVsFvRy5A1Q) [/ url]
2. Table with usernames [url] [users\_example.csv — Yandex.Disk](https://yadi.sk/d/vY8UP7Hd-YguDQ) [/ url]

And with the help of a counter, go through the columns of the table with users and compare each column with a group from the first file.

The solution is crutch, maybe someone faced a similar task and can advise how to make it more beautiful?

I will be grateful.

```auto

$Gs = Import-Csv -Path "C:\IT\groups.csv" -Encoding Default -Delimiter ";" 
$Us = Import-Csv -Path "C:\IT\users.csv" -Encoding Default -Delimiter ";" 
#
# Table counter
#
$i=1
ForEach ($G in $Gs) {
$Gr = $G.Group
#
# Search for group in AD
#
$Group = get-adgroup -SearchBase "OU=New Groups,OU=IT,OU=root,DC=smp,DC=loc" -filter 'name -like $Gr'
ForEach ($U in $Us) {
$Users = $U.$i
#
# Search for user in AD
#
$User = Get-ADUser -SearchBase "OU=root,DC=smp,DC=loc" -filter {GivenName -like $Users}
Write-Host $Group.SamAccountName
Write-Host $User.SamAccountName
#
# Add user to group
#
Add-ADGroupMember -Identity $Group.SamAccountName -Members $User.SamAccountName
}
$i++
#$Users = Import-Csv -Path "C:\IT\users_new.csv" -Delimiter ";"
#$Group_Name = Get-ADGroup -Filter {name -like '$Group'} 
#Write-Host $Group_Name
}

```

---

<div class="post-metadata">

**Author:** ![adminofthings](https://avatars.discourse-cdn.com/v4/letter/a/90ced4/32.png) [@adminofthings](https://forums.powershell.org/u/adminofthings)\
**Post date:** [March 1, 2021, 10:21pm UTC](https://forums.powershell.org/t/add-multiple-users-to-ad-groups-from-csv/15796/2 "2021-03-01T22:21:42Z")

</div>

Since the `-Members` parameter on `Add-ADGroupMember` supports a collection, you only need to do one `Add-ADGroupMember` per group if you group your users correctly.

---

<div class="post-metadata">

**Author:** ![ralphmwr](https://sea1.discourse-cdn.com/flex019/user_avatar/forums.powershell.org/ralphmwr/32/1064_2.png) [@ralphmwr](https://forums.powershell.org/u/ralphmwr)\
**Post date:** [March 2, 2021, 7:48pm UTC](https://forums.powershell.org/t/add-multiple-users-to-ad-groups-from-csv/15796/3 "2021-03-02T19:48:42Z")

</div>

The biggest issue I see is the format of the csv. Csv is a linear style data structure. A hierarchical structure like an xml or json would be more appropriate. Having said that you can use the member property name to get the groups without resorting to creating two new files. Here’s a solution.

```auto
$csv = Import-Csv C:\Users\micha\Downloads\group_ad.csv -Delimiter ";"
$groups = $csv |
   Get-Member -MemberType NoteProperty |
       Select-Object -ExpandProperty "name"

foreach ($group in $groups) {
   $users = @($csv | Where-Object {$_.$group} | Select-Object -ExpandProperty $group)
   $ADUsers = Get-ADUser -SearchBase "OU=root,DC=smp,DC=loc" -filter {GivenName -in $Users}
   Get-ADGroup -SearchBase "OU=New Groups,OU=IT,OU=root,DC=smp,DC=loc" -filter 'name -like "$group"' | 
       Add-ADGroupMember -Members $ADUsers.SamAccountName
} #foreach group

```

---

<div class="post-metadata">

**Author:** ![dotnVo](https://avatars.discourse-cdn.com/v4/letter/d/4af34b/32.png) [@dotnVo](https://forums.powershell.org/u/dotnVo)\
**Post date:** [May 16, 2024, 8:27pm UTC](https://forums.powershell.org/t/add-multiple-users-to-ad-groups-from-csv/15796/4 "2024-05-16T20:27:46Z")

</div>


