Auto-Population - Active Directory
Par admin20 juillet 2025
N/A(0 avis)

Auto-Population - Active Directory

Introduction

Pour ceux qui ne connaissent pas Active Directory, c'est un système de gestion d'annuaire pour les réseaux interne ça permet de simplifier énormément de choses telles que les déploiement d'images système au sein d'un réseau, la gestion des droits de groupes d'utilisateurs (Droits Service Comptable != Droits Service Technique), et beaucoup d'autre chose c'est primordial en entreprise.

Ici c'est un petit article pour présenter ce qu'est l'autopopulation AD avec un script cadeaux et c'est franchement pas long.

Connaissances requises

Faire de l'autopopulation c'est en gros simplifier la tâche d'ajout des utilisateurs/groupes/unité_organisationnelle dans l'AD. Pour automatiser tout ça parcequ'on est feignant et surtout parceque PowerShell c'est abominable comme syntaxe mdr. Pour ça faut prendre en compte quelques trucs :

  • Ecrire le programme en PowerShell ça prend 5 minutes au lieu de 10 ans et c'est toujours compatible
  • Foutre des blocs d'erreurs partout parceque dans un AD une seule merde peut tout casser
  • Connaître le distinguished name :
    • En gros quand tu crées un AD tu le crée sur un serveur qui deviens le Domain Controller (ou DC), dans ce DC tu peux créer des OU (dossiers dans lesquelles on range tel ou tel groupe d'utilisateurs ou autre) et le chemin dans lequel est créé ton OU (ou Groupe ou autre), va être retranscrit en un nom bien particulier qui fonctionne comme suit :
Type d'objet Préfixe Exemple Description
Utilisateur CN CN=Jean Dupont Common Name : nom de l’objet
Groupe CN CN=IT-Groupe Même préfixe que pour un utilisateur
OU (Unité d'organisation) OU OU=Informatique Organizational Unit
Domaine DC DC=entreprise,DC=local Domain Component : composant du domaine
  • Concrètement l'utilisateur Jhonny dans l'ou Comptabilité dans l'ou Gestion ça donne ça : CN=Jhonny,OU=Comptabilité,OU=Gestion,DC=entreprise,DC=local

  • Vous pouvez aussi obtenir ce nom avec la commande :

Get-ADUser "Jhonny" | Select-Object DistinguishedName

A part ça en vrai y'a pas grand chose à savoir mis a part comment se crée les groupes et utilisateurs dans un AD.

Le Script

# Vérifie module ActiveDirectory
if (-not (Get-Module -ListAvailable -Name ActiveDirectory)) {
    Write-Error "Le module ActiveDirectory n'est pas disponible. Installez les RSAT ou lancez ce script sur un contrôleur de domaine."
    exit
}
Import-Module ActiveDirectory

function Create-ADGroupIfNotExist {
    param (
        [string]$GroupName,
        [string]$Description,
        [string]$Domain
    )

    $groupExists = Get-ADGroup -Filter "Name -eq '$GroupName'" -Server $Domain -ErrorAction SilentlyContinue
    if ($null -eq $groupExists) {
        Write-Host "Création du groupe : $GroupName"
        New-ADGroup -Name $GroupName -GroupScope Global -GroupCategory Security -Description $Description -Server $Domain
    }
    else {
        Write-Host "Le groupe $GroupName existe déjà."
    }
}

function Create-ADUserIfNotExist {
    param (
        [string]$UserName,
        [string]$FullName,
        [string]$Email,
        [string]$Domain,
        [System.Security.SecureString]$Password
    )
    $userExists = Get-ADUser -Filter "SamAccountName -eq '$UserName'" -Server $Domain -ErrorAction SilentlyContinue
    if ($null -eq $userExists) {
        Write-Host "Création de l'utilisateur : $UserName"
        New-ADUser -Name $FullName -SamAccountName $UserName -UserPrincipalName $Email `
            -EmailAddress $Email -AccountPassword $Password -Enabled $true -ChangePasswordAtLogon $true -Server $Domain
    }
    else {
        Write-Host "L'utilisateur $UserName existe déjà."
    }
}

function AddUserToGroup {
    param (
        [string]$UserName,
        [string]$GroupName,
        [string]$Domain
    )
    try {
        Add-ADGroupMember -Identity $GroupName -Members $UserName -Server $Domain -ErrorAction Stop
        Write-Host "Ajout de $UserName au groupe $GroupName"
    }
    catch {
        Write-Warning "Erreur lors de l'ajout de $UserName au groupe $GroupName : $_"
    }
}

# Demande de chemin JSON (optionnel)
$jsonPath = Read-Host "Chemin vers le fichier JSON (laisser vide pour mode interactif)"

if ($jsonPath -and (Test-Path $jsonPath)) {
    # Mode JSON
    $jsonData = Get-Content $jsonPath -Raw | ConvertFrom-Json
    $domain = $jsonData.domaine
    Write-Host "Domaine détecté dans JSON : $domain"

    # Demande mot de passe temporaire commun
    $password = Read-Host "Entrez un mot de passe temporaire commun pour tous les utilisateurs" -AsSecureString

    foreach ($group in $jsonData.groupes) {
        Create-ADGroupIfNotExist -GroupName $group.nom -Description $group.description -Domain $domain

        foreach ($user in $group.utilisateurs) {
            Create-ADUserIfNotExist -UserName $user.username -FullName $user.nom_complet -Email $user.email -Domain $domain -Password $password
            AddUserToGroup -UserName $user.username -GroupName $group.nom -Domain $domain
        }
    }

} else {
    # Mode interactif (simplifié)

    $domain = Read-Host "Entrez le nom de votre domaine (ex: contoso.local)"

    # Mot de passe temporaire commun pour tous les utilisateurs
    $password = Read-Host "Entrez un mot de passe temporaire commun pour tous les utilisateurs" -AsSecureString

    # Groupes
    $groupInput = Read-Host "Entrez les noms des groupes à créer, séparés par des virgules"
    $groupNames = $groupInput -split "," | ForEach-Object { $_.Trim() }

    foreach ($group in $groupNames) {
        Create-ADGroupIfNotExist -GroupName $group -Description "" -Domain $domain
    }

    # Utilisateurs
    $userInput = Read-Host "Entrez les noms des utilisateurs à créer, séparés par des virgules"
    $userNames = $userInput -split "," | ForEach-Object { $_.Trim() }

    foreach ($user in $userNames) {
        $fullName = Read-Host "Entrez le nom complet de l'utilisateur $user"
        $email = Read-Host "Entrez l'email de l'utilisateur $user"
        Create-ADUserIfNotExist -UserName $user -FullName $fullName -Email $email -Domain $domain -Password $password
    }

    # Attribution aux groupes
    foreach ($user in $userNames) {
        $userGroupsInput = Read-Host "Entrez les groupes (séparés par des virgules) auxquels ajouter l'utilisateur $user"
        $userGroups = $userGroupsInput -split "," | ForEach-Object { $_.Trim() }

        foreach ($group in $userGroups) {
            AddUserToGroup -UserName $user -GroupName $group -Domain $domain
        }
    }
}

Write-Host "Traitement terminé."

Vous pouvez nous contacter pour toutes demandes ou besoin numérique -> Contact Oxelya

Donnez votre avis

Cliquez pour noter