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