Meilleur auteur de réponses
gestion de groupes AD en fonction du champ department via powershell

Question
-
Bonjour,
je suis à la recherche d'éléments permettant d'organiser les groupes d'un AD en foncton du champ department.
exemple:
l'utilisateut toto a pour department sales/clothes/shoes
l'utilisateur titi a pour department communication/web
l'objectif du script est que toto et les autres users du même department soeint dans les groupe ssuivants:
sales
clothes
shoes
et titi dans
communication
web
j'arrive bien a écrire un script qui crée le groupesles ou le groupe communication et y ajoute les bons users, mais pour les niveaux e, dessous je sèche.
si quelqu'un a une idée...
Réponses
-
Voici le script qui peut faire ceci. Il suffit d'ajuster les 2 premières variables:
$user = "toto" $separator = "/" $adUser = Get-ADUser -Filter 'Name -eq $user' -Properties * $departments = $adUser.Department $departments = $departments.Split($separator) foreach ($department in $departments){ Add-ADGroupMember $department $user $groupMember = (Get-ADGroupMember $department).Name foreach ($member in $groupMember){ if ($member -eq $user){Write-Host -ForegroundColor Green "The user $user has been added to group $department"} else {Write-Host -ForegroundColor Red "Problem to add the user $user to group $department"} } }
Florent
- Modifié Flodu31MVP vendredi 15 avril 2016 10:10
- Proposé comme réponse Pluton1795 jeudi 21 avril 2016 20:45
- Marqué comme réponse cagliostro69000 lundi 30 mai 2016 11:19
-
Bonjour,
Je ne comprend pas le 1, le script fait ceci... Je viens de tester de nouveau.
Pour ce qui est du 2, voici la solution, avec un Try/Catch:
$users = "toto","titi" $separator = "/" foreach ($user in $users){ Write-Host "Performing steps for user $user" $adUser = Get-ADUser -Filter 'Name -eq $user' -Properties * $departments = $adUser.Department $departments = $departments.Split($separator) foreach ($department in $departments){ Try { Get-ADGroup $department Write-Warning "The group $department already exists" } Catch { New-ADGroup -Path "OU=Test,DC=domain,DC=local" -Name $department -SamAccountName $department -GroupCategory Security -GroupScope DomainLocal Write-Host -ForegroundColor Green "The group $department has been created" } Add-ADGroupMember $department $user $groupMember = (Get-ADGroupMember $department).Name foreach ($member in $groupMember){ if ($member -eq $user){Write-Host -ForegroundColor Green "The user $user has been added to group $department"} else {Write-Host -ForegroundColor Red "Problem to add the user $user to group $department"} } } }
Florent
- Marqué comme réponse cagliostro69000 lundi 30 mai 2016 11:19
-
Bonjour,
désolé pour ma réponse tardive, mais j'ai été pas mal occupé ces derniers temps
les 2 scripts fonctionnent très bien, j'avais juste quelques soucis d'adaptation à l'infra
encore merci pour votre aide
- Marqué comme réponse cagliostro69000 lundi 30 mai 2016 11:19
Toutes les réponses
-
Bonjour,
Si je comprend bien, vous souhaitez que le script récupère le département du groupe toto, et suite à ces départements, récupérer tous les utilisateurs qui ont au moins un département en commun?
Vos noms de département sont les mêmes que les groupes?
Florent
-
merci pour vore réponse
oui, les noms de groupes sont les mêmes que ceux des départements
le but est de récupérer pour chaque utilisateur le champ department et de s'en servir pou l'intégrer dans le sbon groupes
toto a pour champ sales/clothes/shoes
à la fin de la manip il devra être dans le groupe sales, le groupe clothes et le groupe shoes
alors que titi qui a pour department communication/web sera dans les groupes communication et web
-
-
Voici le script qui peut faire ceci. Il suffit d'ajuster les 2 premières variables:
$user = "toto" $separator = "/" $adUser = Get-ADUser -Filter 'Name -eq $user' -Properties * $departments = $adUser.Department $departments = $departments.Split($separator) foreach ($department in $departments){ Add-ADGroupMember $department $user $groupMember = (Get-ADGroupMember $department).Name foreach ($member in $groupMember){ if ($member -eq $user){Write-Host -ForegroundColor Green "The user $user has been added to group $department"} else {Write-Host -ForegroundColor Red "Problem to add the user $user to group $department"} } }
Florent
- Modifié Flodu31MVP vendredi 15 avril 2016 10:10
- Proposé comme réponse Pluton1795 jeudi 21 avril 2016 20:45
- Marqué comme réponse cagliostro69000 lundi 30 mai 2016 11:19
-
-
Bonjour,
merci pour votre aide,
désolé pour mon retard, mais j'ai essayé d'ajouter certaines fonctionnalités par moi-même
1- récupération du login de tous les users actifs dans l'AD
$users = "d:\users.txt"
get-aduser -filter "enabled -eq 'true'" -property * -SearchBase "dc=tot,dc=sample,dc=com" | select -ExpandProperty samaccountname > $users2- pour tous les users de cette liste, on récupère le department
Import-Module ActiveDirectory
$userfile = "d:\users.txt"
$separator = "/"
$i = 0
$user = get-content $userfile
$aduser = get-content $userfile | ForEach-Object {Get-ADUser "$_" -Properties *}
$departments = $adUser.department
$departments = $departments.Split("$separator")
echo $departments
3- tentative d'inscription des users dans les groupes (merci @flodu31)
foreach ($department in $departments){
Add-ADGroupMember $department $user
$groupMember = (Get-ADGroupMember $department).Name
foreach ($member in $groupMember){
if ($member -eq $user){Write-Host -ForegroundColor Green "The user $user has been added to group $department"} else {Write-Host -ForegroundColor Red "Problem to add the user $user to group $department"}
}
}manquent 2 choses:
1 - dans le script actuel chaque user est ajouté au groupe du department, même si il ne fait pas partie e ce department => ajout d'un if department.user = le groupe tu ajoutes le user ay groupe, sinon tu passe
2- si le groupe correspondant au department n'existe pas tu le créée
ja vais regarder de mon côté, si quelqu'un a des pistes
-
Bonjour,
Je ne comprend pas le 1, le script fait ceci... Je viens de tester de nouveau.
Pour ce qui est du 2, voici la solution, avec un Try/Catch:
$users = "toto","titi" $separator = "/" foreach ($user in $users){ Write-Host "Performing steps for user $user" $adUser = Get-ADUser -Filter 'Name -eq $user' -Properties * $departments = $adUser.Department $departments = $departments.Split($separator) foreach ($department in $departments){ Try { Get-ADGroup $department Write-Warning "The group $department already exists" } Catch { New-ADGroup -Path "OU=Test,DC=domain,DC=local" -Name $department -SamAccountName $department -GroupCategory Security -GroupScope DomainLocal Write-Host -ForegroundColor Green "The group $department has been created" } Add-ADGroupMember $department $user $groupMember = (Get-ADGroupMember $department).Name foreach ($member in $groupMember){ if ($member -eq $user){Write-Host -ForegroundColor Green "The user $user has been added to group $department"} else {Write-Host -ForegroundColor Red "Problem to add the user $user to group $department"} } } }
Florent
- Marqué comme réponse cagliostro69000 lundi 30 mai 2016 11:19
-
Bonjour,
désolé pour ma réponse tardive, mais j'ai été pas mal occupé ces derniers temps
les 2 scripts fonctionnent très bien, j'avais juste quelques soucis d'adaptation à l'infra
encore merci pour votre aide
- Marqué comme réponse cagliostro69000 lundi 30 mai 2016 11:19