Création des GG
Introduction
Nous allons attaquer la partie des groupes globaux, les créer automatiquement via un script, et y ajouter des membres avec le même principe.
Tableau modèle
Il nous faut d'abord le fichier qui servira de modèle, que l'on mettra à jour, pour faire les modifications.
Le gros avantage est que ce fichier peut-être divisé par service, et distribué aux responsables et directeurs de services pour avoir des infos toujours à jour, sans donner accès à une console d'administration.
| Groupe | Prenom | Nom |
| GG_Direction |
Rozenn |
LUCAS |
|
GG_Direction |
Philippe | PALAS |
| GG_Comptablité | Bertrand | KANMEM |
| GG_Comptablité | Céline | DUPUI |
| GG_Comptablité | Dylan | BLOT |
| GG_Comptablité | Anthony | VORPAL |
| GG_RH | Stéphanie | ROBERT |
| GG_RH | Paul | MORINIERE |
| GG_RH | Francois | PARLAT |
Il faut ensuite exporter, ou convertir ce tableau en csv, encodage UTF8, séparateur ";" point virgule.
On obtient alors ce fichier :
Groupe;Prenom;Nom
GG_Direction;Rozenn;LUCAS
GG_Direction;Philippe;PALAS
GG_Comptablité;Bertrand;KANMEM
GG_Comptablité;Céline;DUPUI
GG_Comptablité;Dylan;BLOT
GG_Comptablité;Anthony;VORPAL
GG_RH;Stéphanie;ROBERT
GG_RH;Paul;MORINIERE
GG_RH;Francois;PARLAT
Création des GG
Voici à présent le script qui permet de créer tous les GG, dans un seul et même endroit, dans OU=GG,OU=AGDLP,DC=domain,DC=local :
Import-Module ActiveDirectory
# -----------------------------
# CONFIGURATION
# -----------------------------
$CSVPath = "C:\chemin\vers\GG.csv"
$OUPath = "OU=GG,OU=AGDLP,DC=domain,DC=local"
$LogFile = "C:\chemin\vers\AD_Group_Update_Errors.txt"
# Nettoyage du fichier de logs
"" | Out-File $LogFile
# Import sans lignes vides
$data = Import-Csv -Path $CSVPath -Delimiter ";" |
Where-Object { $_.Groupe -and $_.Groupe.Trim() -ne "" }
# Regroupement par groupe
$groupes = $data | Group-Object -Property Groupe
foreach ($grp in $groupes) {
$GroupName = $grp.Name.Trim()
Write-Host "`n=== Groupe : $GroupName ==="
# --- Créer le groupe s'il n'existe pas ---
try {
$ADGroup = Get-ADGroup -Identity $GroupName -ErrorAction Stop
$members = Get-ADGroupMember $GroupName -ErrorAction SilentlyContinue
if ($members) {
Remove-ADGroupMember -Identity $GroupName -Members $members -Confirm:$false
}
}
catch {
try {
$ADGroup = New-ADGroup -Name $GroupName `
-SamAccountName $GroupName `
-Path $OUPath `
-GroupScope Global -ErrorAction Stop
}
catch {
"ERREUR création du groupe '$GroupName' : $_" | Out-File $LogFile -Append
continue
}
}
# --- Ajout des membres ---
foreach ($ligne in $grp.Group) {
# Colonnes sans accents
$Prenom = $ligne.Prenom
$Nom = $ligne.Nom
# Vérification des champs
if (-not $Prenom -or -not $Nom) {
"Ligne invalide dans CSV : '$($ligne)' (groupe : $GroupName)" | Out-File $LogFile -Append
continue
}
# Construction DisplayName
$FullName = "$Prenom $Nom".Trim()
Write-Host " → Recherche : $FullName"
# Recherche AD par DisplayName
$User = Get-ADUser -Filter { DisplayName -eq $FullName } -ErrorAction SilentlyContinue
if (!$User) {
"Utilisateur introuvable : $FullName (groupe : $GroupName)" | Out-File $LogFile -Append
continue
}
# Ajout au groupe
try {
Add-ADGroupMember -Identity $GroupName -Members $User.SamAccountName -ErrorAction Stop
}
catch {
"ERREUR ajout : $FullName → $GroupName : $_" | Out-File $LogFile -Append
}
}
}
Si les utilisateurs existes, il se retrouves dans les groupes GG qui leurs correspondant dans le tableau.
J'ai pendant un moment pensé à faire une ligne par GG et séparer les utilisateurs par une ",", mais cela n'aurait pas été pratique pour les éventuels utilisateurs d'autres services.

No comments to display
No comments to display