Parfois on a besoin de mettre à jour en masse des attributs utilisateur Active Directory. C'est le cas lors de rachat, filialisation, déménagement, etc.
Voyons comment le faire sur tous les utilisateurs d'une OU (unité d'organisation, ou container).
En PowerShell
Voici un exemple d'injection de quelques champs :
get-aduser -SearchBase "OU=Paris,OU=France,DC=societe,DC=local" -Filter * | set-aduser -streetaddress "3 rue de Pi" get-aduser -SearchBase "OU=Paris,OU=France,DC=societe,DC=local" -Filter * | set-aduser -postalCode "31415" get-aduser -SearchBase "OU=Paris,OU=France,DC=societe,DC=local" -Filter * | set-aduser -city "Cloudbled" get-aduser -SearchBase "OU=Paris,OU=France,DC=societe,DC=local" -Filter * | set-aduser -l $null get-aduser -SearchBase "OU=Paris,OU=France,DC=societe,DC=local" -Filter * | set-aduser -officephone "+33 4 01 23 45 67" get-aduser -SearchBase "OU=Paris,OU=France,DC=societe,DC=local" -Filter * | set-aduser -fax "+33 4 01 23 45 68" get-aduser -SearchBase "OU=Paris,OU=France,DC=societe,DC=local" -Filter * | set-aduser -homepage "http://maboite.fr"
L'injectin du champ "l" avec $null est ici pour vous montrer comment vider un champ (au départ j'avais injecté la ville dans "l" au lieu de "city"... car en PowerShell "city" correspond à "l" dans l'AD...). Pour éviter ce genre d'erreurs, voici la correspondance avec les attributs dans l'AD (visible avec LDAP Browser / ldp.exe) :
- officephone = attribut telephoneNumber
- city = attribut l
- homepage = attribut wWWHomePage
- tous les attributs (technet)
Pour avoir de l'aide sur des attributs :
Get-Help Set-ADUser -Parameter *phone*
Lister les attributs pour un utilisateur donné :
Get-ADUser xhark-properties * | select telephonenumber
Autre solution pour le faire dans une boucle (bis)
Bien sûr pour mettre à jour juste un utilisateur :
set-aduser xhark -streetaddress "3 rue de Pi"
Avec dsquery
Alternative avec dsquery, qui permet pas de mettre à jour tous les attributs, donc préférez powershell.
dsquery user "OU=Paris,OU=France,DC=societe,DC=local" -limit 0 | dsmod user -street "3 rue de Pi"
dsquery user "OU=Paris,OU=France,DC=societe,DC=local" -limit 0 | dsmod user -tel "+33 4 01 23 45 67"
Conclusion
Simple, pratique, efficace.
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
2 commentaires
Salut Mr Xhark,
J'ai déjà été confronté à vouloir modifier des attributs qui n'ont pas d'arguments dans la commande Set-ADUser.
Pour pouvoir mettre à jour d'autres attributs qui sont pas couramment utilisés voici la méthode que j'utilise :
Set-ADUser -Replace @{
extensionAttribute9 = "valeur";
}
Ce qui donne en une ligne :
Get-ADUser -Identity "samaccountname" -Properties * | Set-ADUser -Replace @{extensionAttribute9 = "valeur";}
Bien sûr, on peut également mettre à jour plusieurs attributs en même temps :
Get-ADUser -Identity "samaccountname" -Properties * | Set-ADUser -Replace @{extensionAttribute9 = "valeur";extensionAttribute10 = "valeur";}
Merci encore pour ce blog et tes billets très instructifs et vraiment intéressant ! Cela fait quelques années maintenant que je viens pour voir un peu tes dernières trouvailles et franchement, merci !
@Djnoy: hello et merci pour ton soutien!
C'est également ce que j'utilise en PowerShell sur des scripts qui parcourent l'AD, typiquement pour de la synchronisation de base avec une base métier et l'AD. J'ai prévu de partager tout ça un jour mais il faut que je rende anonyme le tout 🙂