Créer un utilisateur dans l’Active Directory avec PowerShell

I. Présentation

Lorsque l’on mêle PowerShell et Active Directory, il y a bien une chose que l’on va chercher à faire, c’est créer un nouvel utilisateur dans l’Active Directory en ligne de commande. Surement parce que c’est l’une des tâches basiques que l’on faisait en interface graphique pendant des années, et qu’il est possible d’automatiser aujourd’hui avec PowerShell.

C’est d’autant plus vrai lorsqu’il s’agit de créer un lot d’utilisateurs à partir d’un fichier de données, au format CSV par exemple. Nous y reviendrons, pour le moment, nous allons réaliser la création d’un seul utilisateur afin de bien comprendre l’utilisation du cmdlet PowerShell « New-ADUser ».

Mon objectif c’est de vous faire oublier la console « Utilisateurs et ordinateurs Active Directory » pour la création d’un compte utilisateur.

II. Premiers pas avec New-ADUser

La commande New-ADUser dispose de nombreux paramètres afin de personnaliser et configurer le compte à sa création. L’exécution de la commande ci-dessous parle d’elle-même…

Get-Command New-ADUser -Syntax

New-ADUser

Aussi surprenant que cela puisse paraître, notamment après avoir vu le résultat de la commande précédente, il est possible de créer très facilement un compte. Par exemple, la commande ci-dessous va créer le compte « f.burnel » :

New-ADUser f.burnel

Sans aucun paramètre, sans aucune option : le compte est bien créé, il suffit de le vérifier avec cette commande :

Get-ADUser -Identity f.burnel

Néanmoins, il ne faut pas s’emballer trop rapidement… Le compte est créé, mais il est désactivé, les champs « Nom », « Prénom », « Adresse de messagerie », ou encore le « Nom complet » sont vides. L’attribut UserPrincipalName de l’utilisateur n’est pas défini également.

De plus, son mot de passe n’est pas défini : il devra le modifier à la première ouverture de session. Au niveau de l’annuaire AD, il est créé dans l’OU par défaut, à savoir « Users ». Pour le rendre utilisable, il faudrait commencer par l’activer et définir un mot de passe.

Tout ça pour dire que, même si l’utilisateur est créé, cela n’est pas vraiment pertinent… Il va falloir faire un effort et ajouter des paramètres à la suite de la commande New-ADUser.

Maintenant, créons un utilisateur avec les données suivantes :

  • Nom complet : Maude Zarella
  • Nom d’affichage Windows : ZARELLA Maude
  • Prénom : Maude
  • Nom : Zarella
  • Identifiant : maude.zarella
  • User Principal Name (UPN) : [email protected]
  • Adresse e-mail : [email protected]
  • Unité d’organisation cible : OU=Personnel,DC=IT-CONNECT,DC=LOCAL
  • Compte actif
  • Mot de passe définit sur « [email protected] » et l’utilisateur devra le changer à la première connexion

Concrètement pour chacune des données ci-dessus, il est possible de mettre en face un attribut dans l’Active Directory, et par extension un paramètre du cmdlet New-ADUser.

La commande magique pour créer un compte à partir de ces données est la suivante :

New-ADUser -Name "Maude Zarella" `
           -DisplayName "ZARELLA Maude" `
           -GivenName "Maude" `
           -Surname "Zarella" `
           -SamAccountName "maude.zarella" `
           -UserPrincipalName "[email protected]" `
           -EmailAddress "[email protected]" `
           -Path "OU=Personnel,DC=IT-CONNECT,DC=LOCAL" `
           -AccountPassword(Read-Host -AsSecureString "Mot de passe ?") `
           -ChangePasswordAtLogon $true `
           -Enabled $true

Les paramètres ont un nom relativement parlant, sous réserve d’avoir quelques notions basiques d’anglais. Certains paramètres, comme le prénom (GivenName), le nom (Surname) ou encore l’adresse e-mail (EmailAddress) accepte une chaîne de caractères comme valeur.

Ce n’est pas le cas de tous les paramètres (donc les attributs), notamment le paramètre -Enabled qui est un booléen qui sert à activer ou désactiver un compte, ou -ChangePasswordAtLogon qui sert à indiquer si l’utilisateur doit changer ou non son mot de passe à la première ouverture de session.

Enfin, le mot de passe (AccountPassword) quant à lui doit être une chaîne de caractères sécurisée, ce qui nécessite d’intégrer la valeur d’une certaine manière : les guillemets ne suffiront pas. Dans cet exemple, je récupère la chaîne sécurisée via Read-Host c’est-à-dire qu’une pop-up va s’afficher à l’écran afin d’inviter l’administrateur à saisir le mot de passe à attribuer à cet utilisateur.

Pour écrire notre mot de passe en clair directement dans le script, la syntaxe du paramètre -AccountPassword est la suivante :

-AccountPassword (ConvertTo-SecureString "[email protected]" -AsPlainText -Force)

Ce n’est pas top, mais pour automatiser la création d’utilisateurs en lot, on ne peut pas se permettre de saisir chaque mot de passe manuellement. Pour un compte, comme ici, disons que c’est acceptable. Retenez l’essentiel : l’utilisateur va modifier le mot de passe à la première ouverte de session.

Note : le paramètre -Server qui permet d’indiquer un contrôleur de domaine à cibler est bien sûr disponible pour New-ADUser.

Si l’on regarde le compte créé dans la console « Utilisateurs et ordinateurs Active Directory », nous pouvons voir que c’est conforme. Exceptionnellement, je vous autorise à y jeter un coup d’œil. En PowerShell, nous pouvons bien entendu récupérer des informations au sujet de cet utilisateur :

Get-ADUser -Identity "maude.zarella"

Au passage, j’en profite pour vous féliciter : vous venez de créer votre premier utilisateur personnalisé dans l’Active Directory !

III. Créer un utilisateur AD : découverte d’une autre syntaxe

Nous venons de voir comment utiliser le cmdlet New-ADUser en spécifiant les paramètres les uns après les autres. Il y a une autre façon de faire en s’appuyant sur une hashtable qui va contenir toutes nos valeurs et ensuite nous allons passer ces valeurs directement à la commande New-ADUser.

Si l’on reprend l’exemple de l’utilisateur précédent, cela donne l’écriture suivante :

$NewUserParams = @{
    Name = "Maude Zarella"
    DisplayName = "ZARELLA Maude"
    GivenName = "Maude"
    Surname = "Zarella"
    SamAccountName = "maude.zarella"
    UserPrincipalName = "[email protected]"
    EmailAddress = "[email protected]"
    Path = "OU=Personnel,DC=IT-CONNECT,DC=LOCAL"
    AccountPassword = (Read-Host -AsSecureString "Mot de passe ?")
    ChangePasswordAtLogon = $true
    Enabled = $true
}
New-ADUser $NewUserParams

Dans la variable $NewUserParams, les paramètres sont déclarés et les valeurs associées. Ensuite, on appelle cette variable directement dans $NewUserParams.

IV. New-ADUser : les paramètres additionnels

Lorsque vous allez commencer à vouloir affiner la création de votre utilisateur, il se peut que vous ne trouviez pas le paramètre associé à l’attribut dans lequel vous souhaitez injecter des données. La bonne nouvelle, c’est qu’il y a une solution à cette problématique puisque le paramètre -OtherAttributes sert à écrire dans n’importe quel attribut de l’Active Directory.

Par exemple, il est intéressant de modifier l’attribut « ProxyAddresses » pour définir l’adresse e-mail principale de l’utilisateur si vous utilisez la synchronisation via Azure AD Connect sur Office 365. La commande New-ADUser n’intègre pas de paramètre pour cet attribut, il faut utiliser -OtherAttributes. Si l’on reprend l’exemple précédent, cela donne :

New-ADUser -Name "Maude Zarella" `
           -DisplayName "Maude Zarella" `
           -GivenName "Maude" `
           -Surname "Zarella" `
           -SamAccountName "maude.zarella" `
           -UserPrincipalName "[email protected]" `
           -EmailAddress "[email protected]" `
           -Path "OU=Personnel,DC=IT-CONNECT,DC=LOCAL" `
           -AccountPassword(Read-Host -AsSecureString "Mot de passe ?") `
           -ChangePasswordAtLogon $true `
           -Enabled $true `
           -OtherAttributes @{'proxyaddresses'="SMTP:[email protected]"}

La syntaxe est un peu particulière, mais c’est logique, il faut indiquer à la fois le nom de l’attribut AD et la valeur que l’on souhaite injecter.

Note : même si un attribut dispose d’un paramètre correspondant, il peut être défini via le paramètre OtherAttributes.

Bien entendu, plusieurs attributs peuvent être configurés de cette façon, voici la syntaxe à adopter :

-OtherAttributes @{'surname'="Zarella";'givenName'="Maude"}

Enfin, nous avons vu comment imposer le changement du mot de passe à la première ouverture de session (ChangePasswordAtLogon), mais il existe aussi des paramètres pour gérer les autres options courantes liées aux mots de passe :

  • -CannotChangePassword = L’utilisateur ne peut pas changer de mot de passe
  • -PasswordNeverExpires = Le mot de passe n’expire jamais

Un petit bonus, pour définir une date d’expiration du compte, le paramètre -AccountExpirationDate doit être ajouté à la commande New-ADUser en spécifiant une date.

En cas de besoin, la documentation officielle de Microsoft est une bonne aide pour vous renseigner sur les différents paramètres : Aide - New-ADUser

Suite à ces premiers pas avec la commande New-ADUser, il est temps de passer à la vitesse supérieure et de voir comment créer des comptes en lot, à partir d’un fichier CSV. Direction le prochain chapitre.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian Burnel

Ingénieur système et réseau et cofondateur d'IT-Connect. 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.

florian has 3218 posts and counting.See all posts by florian