Créer des utilisateurs de test dans AD avec un mini-script PowerShell
Cet article s’adresse aux débutants en PowerShell. Tout administrateur AD qui fait un peu de PowerShell a sûrement déjà son script équivalent.
J’insiste sur les mots ici : il s’agit de créer des utilisateurs de test avec un petit script PowerShell très simple. En effet le Technet Script Center est très bien fourni en scripts pour Active Directory, utilisables en production, mais mon idée est d’avoir sous la main un petit fichier CSV et un script pour alimenter un AD de test très rapidement.
Un détail qui a son importance est évidemment la sécurité. En production il n’est pas question de stocker des mots de passe en clair dans un fichier CSV ni dans un script. C’est pourquoi la commande PowerShell New-ADUser prévoit de créer des comptes sans mot de passe mais désactivés par défaut. Dans un environnement de test, on accepte que les mots de passe soient exposés et que les comptes soient immédiatement actifs.
Voici donc un exemple de fichier CSV avec quelques utilisateurs, que j’appelle adusers.csv :
GivenName,Surname,SamAccountName
Odile,Deray,odile
Serge,Karamazov,kara
Patrick,Biales,biales
Simon,Jeremi,simon
Jean-Paul,Martoni,martoni
L’idée de ce CSV est de ne contenir que les informations minimales : prénom, nom, alias. Et encore, l’alias aurait été suffisant mais le prénom et le nom aident à donner un air plue réaliste. Les autes attributs indispensables, comme le CN, l’UPN et le mot de passe seront calculés dans le script.
Et voici le script adusers.ps1 que j’utilise :
Import-Module ActiveDirectory
$path = Split-Path -parent $MyInvocation.MyCommand.Definition
$ou = "OU=users,OU=demo,DC=demo1,DC=local"
$upnsuffix = "@demo1.local"
$securepwd = ConvertTo-SecureString "Pass/123" -AsPlainText -Force
Import-Csv "$path\adusers.csv" | New-ADUser `
-Name {$_.GivenName+" "+$_.Surname} -Path $ou `
-DisplayName {$_.GivenName+" "+$_.Surname} `
-UserPrincipalName {$_.SamAccountName+$upnsuffix} `
-AccountPassword $securepwd -Enabled $true
Remarquez que le contenu du CSV est directement envoyé à la commande New-ADUser : les noms des colonnes du CSV doivent correspondre exactement à des noms de paramètres de la commande. D’où l’intérêt de garder l’aide de la commande sous le coude.
Le script est à personnaliser en fonction de l’OU dans laquelle vous voulez créer les utilisateurs (variable $ou), du suffixe UPN ( $upnsuffix) et du mot de passe (commun à tous les utilisateurs dans mon cas, voir $securepwd). Il doit être exécuté en tant qu’administrateur du domaine, et le fichier CSV doit se trouver dans le même répertoire que le script.
Comme vous pouvez le constater c’est très basique mais extensible. Par exemple si vous avez besoin d’un champ supplémentaire, vous pouvez ajouter la colonne supplémentaire dans le CSV ; si le champ peut être construit à partir des autres, il est plus simple de l’ajouter dans le script sous la forme d’un paramètre de New-ADUser.
En partant de cette base minimale, vous pourrez sans doute construire votre propre script en fonction de vos besoins et contraintes.
[mise à jour] Voici une autre version du script, utilisant Select-Object pour ajouter aux objets retournés du CSV les attributs nécessaires pour New-ADUser. C’est peut-être plus élégant ?
Import-Module ActiveDirectory
$path = Split-Path -parent $MyInvocation.MyCommand.Definition
$ou = "OU=users,OU=demo,DC=demo1,DC=local"
$upnsuffix = "@demo1.local"
$securepwd = ConvertTo-SecureString "Pass/123" -AsPlainText -Force
Import-Csv "$path\adusers.csv" | Select-Object *,
@{Name="Name"; Expression={$_.GivenName+" "+$_.Surname}},
@{Name="Path"; Expression={$ou}},
@{Name="DisplayName"; Expression={$_.GivenName+" "+$_.Surname}},
@{Name="UserPrincipalName"; Expression={$_.SamAccountName+$upnsuffix}},
@{Name="AccountPassword"; Expression={$securepwd}},
@{Name="Enabled"; Expression={$true}} | New-ADUser
Comments
- Anonymous
January 01, 2003
Dariush2b : merci pour la remarque. C'est vrai sur un système où la "locale" est française (séparateur = point-virgule par défaut parce que la virgule est utilisée comme point décimal). Comme mes systèmes serveurs sont toujours en anglais US je n'ai pas pensé à ce cas. - Anonymous
January 01, 2003
Jenni : la variable $ou est à personnaliser en function de l'environnement, elle contient l'OU dans laquelle on veut créer les utilisateurs. - Anonymous
January 01, 2003
Philippe : il y a plein d'exemples concernant les groupes dans AD ici : https://gallery.technet.microsoft.com/scriptcenter/site/search?f%5B0%5D.Type=RootCategory&f%5B0%5D.Value=activedirectory&f%5B0%5D.Text=Active%20Directory&f%5B1%5D.Type=SubCategory&f%5B1%5D.Value=groups&f%5B1%5D.Text=Groups - Anonymous
May 27, 2014
Serait-il possible d'expliquer la ligne : $ou = "OU=users,OU=demo,DC=demo1,DC=local"
Merci. - Anonymous
July 02, 2014
Cet article fait partie d'une série : BYOD - Montage d'une plateforme de démo dans Azure - 1ère - Anonymous
November 20, 2014
Import-Csv "$pathadusers.csv" -Delimiter ","| New-ADUser `
je pense que c'est mieux avec un delimiter pour lire ton fichier csv :) - Anonymous
February 24, 2015
Bonjour, je voudrais ajouter un utilisateur au groupe comment pourrais je y proceder ? - Anonymous
May 10, 2015
J'ai utilisé les modèles que vous avez et impossible de créer mes users. L'erreur suivante apparait pour chaque ligne:
New-ADUser : Objet de l’annuaire non trouvé
Au caractère C:UsersAdministrateurDesktopScripsPowerShelluser2.ps1:6 : 46
+ Import-Csv "$pathusers.csv" -Delimiter ";"| New-ADUser<br>+ ~~~~~~~~~~~~<br>+ CategoryInfo : ObjectNotFound: (CN=\ ,OU=BIOPA...DC=LOCAL,DC=INT:String) [New-ADUser], ADIdentityNot<br>FoundException<br>+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException<br>,Microsoft.ActiveDirectory.Management.Commands.NewADUser<br><br>une idée?<br>C'est un AD 2012<br>Le fichier csv a pour séparateur les " ; "<br><br>J'ai modifié votre demo en:<br><br>Import-Module ActiveDirectory<br>$path = Split-Path -parent $MyInvocation.MyCommand.Definition<br>$ou = "OU=XX(c le nom de la société),OU=Utilisateurs,DC=XX,DC=LOCAL,DC=INT"<br>$upnsuffix = "@XX.local"<br>$securepwd = ConvertTo-SecureString "Laboratoire123*" -AsPlainText -Force<br>Import-Csv "$pathusers.txt" -Delimiter ";"| New-ADUser
-Name {$.GivenName+" "+$.Surname} -Path $ou<br>-DisplayName {$_.GivenName+" "+$_.Surname}
-UserPrincipalName {$_.SamAccountName+$upnsuffix} `
-AccountPassword $securepwd -Enabled $true
Help! - Anonymous
September 29, 2015
$upnsuffix = "@XX.local" ne correspond pas à votre chemin plus haut
$ou = "OU=XX(c le nom de la société),OU=Utilisateurs,DC=XX,DC=LOCAL,DC=INT" - Anonymous
October 12, 2015
$ou = "OU=XX(c le nom de la société),OU=Utilisateurs,DC=XX,DC=LOCAL,DC=INT"
Tu as inversé cette ligne il me semble :
ce devrait plutot être :
$ou = "OU=Utilisateurs,OU=XX(c le nom de la société),DC=XX,DC=LOCAL,DC=INT" - Anonymous
June 19, 2017
Bonjour,comme puis-je rajouter l'attribue employeeID dans ce ce script?Cdt - Anonymous
August 10, 2017
Salut !Merci pour ce tuto. Si je veux créer X user avec pour chacun un mdp différent dans une Ou, comment faire ?Je n'arrive pas à comprendre la Cmd AccountPadsword et le pass/123 ?Par avance merci !