19/05/2024

Modifier des comptes Active Directory en lot avec PowerShell

I. Présentation

Dans ce chapitre, nous allons mettre en application ce que nous avons pu voir précédemment, à savoir la récupération d’informations sur des utilisateurs Active Directory, ainsi que la boucle Foreach que l’on a utilisée pour créer des utilisateurs en lot à partir d’un CSV.

Pour modifier des utilisateurs Active Directory en masse, nous allons réutiliser la même boucle. Ensuite, pour sélectionner les utilisateurs à modifier, soit on peut avoir un fichier CSV en entrée, ou alors on récupère une sélection d’utilisateurs directement dans l’Active Directory avec Get-ADUser.

La commande PowerShell à utiliser pour modifier un compte utilisateur est Set-ADUser. Pour modifier le mot de passe, nous avons pu voir dans le chapitre précédent qu’il fallait utiliser Set-ADAccountPassword.

II. Ajouter une valeur dans un attribut en masse à partir d’un CSV

Dans ce premier exemple, nous allons reprendre notre CSV précédent, à savoir celui qui contient les données suivantes :

Prenom;Nom;Fonction
Gérard;Mensoif;Directeur
Sophie;Fonfek;Secrétaire
John;Doeuf;Comptable
Juda;Nanas;Secrétaire
Cécile;Ourkessa;Secrétaire

Nous allons faire en sorte, pour l’exemple, d’injecter les valeurs de la colonne « Fonction » dans le champ « Description » de nos utilisateurs.

Comme point de départ, nous allons donc charger le fichier CSV dans la variable $CSVData et ajouter une boucle Foreach pour parcourir la collection d’objets. Dans l’idéal, il faudrait avoir les identifiants dans le fichier CSV, ce serait plus simple pour cibler les utilisateurs. Ici, nous n’avons pas les identifiants dans le fichier CSV, mais on sait qu’ils sont sous la forme « p.nom » : on va donc le construire à partir du prénom et du nom (comme vu dans le chapitre précédent).

Voici le point de départ :

$CSVFile = "C:\Scripts\AD_USERS\Utilisateurs.csv"
$CSVData = Import-CSV -Path $CSVFile -Delimiter ";" -Encoding UTF8

Foreach($Utilisateur in $CSVData){
    # Construction du login (SamAccountName)
    $UtilisateurLogin = ($Utilisateur.Prenom).Substring(0,1) + "." + $Utilisateur.Nom
}

Nous allons intégrer à notre boucle la commande Set-ADUser pour modifier le champ « Description » pour chaque utilisateur. La commande est :

Set-ADUser -Identity $UtilisateurLogin -Description $Utilisateur.Fonction

Dans le script, on va au préalable s’assurer que l’utilisateur existe avant de chercher à le modifier. Au final, voici le code complet de la boucle :

Foreach($Utilisateur in $CSVData){

    # Construction du login (SamAccountName)
    $UtilisateurLogin = ($Utilisateur.Prenom).Substring(0,1) + "." + $Utilisateur.Nom

    if (Get-ADUser -Identity $UtilisateurLogin)
    {
       Write-Output "L'identifiant $UtilisateurLogin existe, l'utilisateur va être modifié."
       Set-ADUser -Identity $UtilisateurLogin -Description $Utilisateur.Fonction
    }
}

Suite à l’exécution de ce bout de code, les changements sont directement visibles dans l’Active Directory :

Set-ADUser

III. Modifications en masse via Get-ADUser et Set-ADUser

Comme je le disais, on peut utiliser Get-ADUser pour récupérer une liste d’utilisateurs et ensuite réaliser des modifications sur les objets récupérés : ajouter une valeur dans un champ, vider un champ, écraser la valeur d’un champ, etc.

Ainsi, je vais vous proposer quelques exemples, simples, mais utiles, pour découvrir les différentes façons d’utiliser Set-ADUser. Chaque exemple commencera par Get-ADUser et le résultat de la requête sera envoyé à Set-ADUSer via le pipeline.

1 – Vider la valeur du champ « Description » pour tous les utilisateurs dont la description contient le mot « Directeur »

Get-ADUser -Filter {Description -like '*Directeur*'} | `
            Set-Aduser -Clear Description

2 – Mettre à jour le nom d’affichage (DisplayName) de tous les utilisateurs de l’OU « OU=Personnel,DC=IT-CONNECT,DC=LOCAL » avec une valeur au format « Nom Prénom » en récupérant les valeurs déjà dans l’objet (attributs Surname et GivenName)

Get-ADUser -Filter * -SearchBase "OU=Personnel,DC=IT-CONNECT,DC=LOCAL" -Properties DisplayName | ForEach-Object{ Set-ADUser $_ -DisplayName ($_.Surname + ' ' + $_.GivenName) }

3 – Remplacer/écraser la valeur du champ « ProxyAddresses » des utilisateurs de l’OU « OU=Personnel,DC=IT-CONNECT,DC=LOCAL » pour indiquer l’adresse e-mail principale sous la forme « SMTP:<e-mail> » en récupérant l’adresse e-mail de l’attribut mail

Get-ADUser -Filter * -SearchBase "OU=Personnel,DC=IT-CONNECT,DC=LOCAL" -Properties mail | ForEach-Object{ Set-ADUser $_ -Replace @{proxyAddresses="SMTP:$($_.mail)"} }

4 – Attribuer le directeur « g.mensoif » comme manager des comptes de l’OU « OU=Personnel,DC=IT-CONNECT,DC=LOCAL » dont la description ne contient pas le mot « directeur »

Get-ADUser -Filter {Description -notlike '*Directeur*'} -SearchBase "OU=Personnel,DC=IT-CONNECT,DC=LOCAL" | ForEach-Object{ Set-ADUser $_ -Manager "G.Mensoif" }

Voilà pour ces quelques exemples, n’hésitez pas à me solliciter si vous avez besoin de réaliser une requête spécifique et que vous rencontrez des difficultés.

En résumé, la commande Set-ADUser est un excellent moyen de mettre à jour rapidement les valeurs des attributs Active Directory d’un ou plusieurs utilisateurs.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail