Freigeben über


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>&#43; ~~~~~~~~~~~~<br>&#43; CategoryInfo : ObjectNotFound: (CN=\ ,OU=BIOPA...DC=LOCAL,DC=INT:String) [New-ADUser], ADIdentityNot<br>FoundException<br>&#43; 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 &quot; ; &quot;<br><br>J'ai modifié votre demo en:<br><br>Import-Module ActiveDirectory<br>$path = Split-Path -parent $MyInvocation.MyCommand.Definition<br>$ou = &quot;OU=XX(c le nom de la société),OU=Utilisateurs,DC=XX,DC=LOCAL,DC=INT&quot;<br>$upnsuffix = &quot;@XX.local&quot;<br>$securepwd = ConvertTo-SecureString &quot;Laboratoire123*&quot; -AsPlainText -Force<br>Import-Csv &quot;$pathusers.txt&quot; -Delimiter &quot;;&quot;| New-ADUser
    -Name {$.GivenName+" "+$.Surname} -Path $ou <br>-DisplayName {$_.GivenName&#43;&quot; &quot;&#43;$_.Surname}
    -UserPrincipalName {$_.SamAccountName+$upnsuffix} `
    -AccountPassword $securepwd -Enabled $true

    Help!
  • Anonymous
    September 29, 2015
    $upnsuffix = "@XX.local&quot; 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 !