PowerShell : Comment modifier des mots de passe dans l’Active Directory ?

I. Présentation

Lorsqu'il est nécessaire d'effectuer des opérations en lots au sein d'un annuaire Active Directory, PowerShell devient vite incontournable. Par exemple, pour modifier le mot de passe pour un utilisateur, on peut le faire en quelques clics via l'interface graphique ou en PowerShell si on trouve ça fun... Par contre, quand il s'agit d'effectuer cette modification du mot de passe sur un ensemble d'utilisateurs, PowerShell est indispensable.

Fort heureusement, Microsoft propose le module ActiveDirectory pour PowerShell et notamment le commandlet "Set-ADAccountPassword" qui permet de modifier le mot de passe.

Ensuite, différentes manières de faire comme le fait d'avoir un fichier CSV avec le login de chaque utilisateur ciblé et le mot de passe associé à chaque utilisateur ; c'est cette solution que l'on va tester. Sinon, on pourrait très bien cibler nos utilisateurs et pour chaque utilisateur générer un mot de passe, avec la création d'un fichier de sortie qui récapitule les mots de passe attribués.

II. Format du CSV

Tout simplement, ce fichier devra contenir deux colonnes : SamAccountName et Password, qui correspondent respectivement à l'identifiant de connexion de l'utilisateur et au mot de passe que l'on veut lui attribuer.

Le fichier CSV sera alors :

SamAccountName;Password
alain.terieur;B0nJ0uR*50
alex.terieur;B0n$0!R*14

Note : On peut nommer les colonnes comme on le souhaite, le principal c'est que les noms soient significatifs.

III. Modifier les mots de passe AD en lot

Désormais, on va construire un petit script qui va travailler à notre place. Mais avant cela, on va s'intéresser à la syntaxe du commandlet Set-ADAccountPassword.

Voici un exemple de cette commande qui permet de modifier le mot de passe pour un utilisateur ayant pour login "florian.burnel" :

Set-ADAccountPassword -Identity florian.burnel -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "GhYjKb!M05n" -Force)

On indique donc le SamAccountName dans le paramètre "Identity", le paramètre "Reset" permet d'indiquer qu'il s'agit d'une réinitialisation du mot de passe et non d'un changement (qui impliquerait d'indiquer le mot de passe actuel via -OldPassword).

Enfin, le plus important le paramètre "NewPassword"qui permet de définir le nouveau mot de passe à attribuer à l'utilisateur. On ne peut pas envoyer des données en clair directement dans ce paramètre, il faut impérativement convertir la valeur en chaîne sécurisée via "ConvertTo-SecureString" comme dans mon exemple.

Sans plus attendre, voici le script :

####
 #### Modules
 ####

# Module PowerShell Active Directory requis
 Import-Module ActiveDirectory

####
#### Variables
####

# Controleur de domaine cible pour faire la MAJ
$Server = "ADDS01"

# Chemin vers le fichier CSV
$fichier = "C:\Scripting\CSV\Users_Password.csv"

# Importer le fichier CSV
$users = Import-Csv -Path $fichier -Delimiter ";" -Encoding UTF8

# Fichier de logs nommé à la date et l'heure de l'exécution du script
$DateHeure = Get-Date -Format "yyyyMMddHHmm"
$log = "C:\Scripting\Logs\Script_Modification_Password_Utilisateurs_$DateHeure.log"

####
#### 1 - Récupération des données dans le CSV
####

# Pour chaque ligne du CSV... (Pour chaque utilisateur)
foreach($user in $users){

# Récupère le SamAccountName de l'utilisateur
$UserSAM = $user.SamAccountName

# Récupérer le mot de passe de l'utilisateur
$UserPwd = $user.Password

####
#### 2 - Modifier le mot de passe de chaque utilisateur dans l'AD
####

# Try-Catch permet d'exécuter une action et si elle échoue d'en faire une autre, dans ce cas précis on met à jour le mot de passe
# et si ça échoue alors on écrit une ligne de log
try{
  Set-ADAccountPassword -Server $Server -Identity $UserSAM -Reset -NewPassword (ConvertTo-SecureString -AsPlainText $UserPwd -Force)
  Add-Content -Path "$log" -Value "Le mot de passe de l'utilisateur $UserLogin est désormais à jour !"
}catch{
 Add-Content -Path "$log" -Value "ERREUR ! Impossible de mettre à jour le mot de passe pour l'utilisateur $UserLogin !"
}
}

Si vous souhaitez explorer les autres possibilités de ce commandlet, voici l'aide sur le TechNet : Set-ADAccountPassword

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

Florian Burnel

Co-Fondateur d’IT-Connect, je souhaite partager mes connaissances et expériences avec vous, et comme la veille techno’ est importante je partage aussi des actus.

florian a publié 1610 articles sur IT-Connect.See all posts by florian

3 réactions sur “PowerShell : Comment modifier des mots de passe dans l’Active Directory ?

  • 06/09/2016 à 16:35
    Permalink

    Bonjour,

    Si on doit le faire en masse sur un ensemble de compte AD, est-il aussi possible avec Powershell de positionner le paramètre « l’utilisateur doit changer de mot de passe à la prochaine ouverture de session » ?

    Répondre
    • 29/09/2016 à 09:35
      Permalink

      Hello Garand,

      voici comment faire :
      #Changer le mot de passe
      Set-ADAccountPassword -Identity testeur -Reset -NewPassword (ConvertTo-SecureString -AsPlainText « M0t2P4$$ » -Force)
      #s’assurer que le mot de passe puisse expirer sinon tu risque d’avoir une erreur powershell
      Set-ADUser –Identity testeur –PasswordNeverExpires $false
      #s’assurer que le mot de passe puisse etre changé sinon tu risques d’avoir les champs « changer mot de passe » et « le mot de passe doit etre changé » à true et bah tu ne pouras donc pas faire modifier ton mot de passe par l’utilisateur.
      set-aduser –Identity testeur -CannotChangePassword $false
      #enfin faire changer le mot de passe à l’utilisateur concerné
      Set-ADUser –Identity testeur –ChangePasswordAtLogon $true

      Bien entendu, on peut également scripter cela avec un fichier csv en variable et un foreach.

      amicalement Bad-Hell

      Répondre
      • 29/09/2016 à 09:48
        Permalink

        petite erreur de ma part les champs qui risquent de se bloquer sont « L’utilisateur devra changer son mot de passe » et « L’utilisateur ne peut pas changer de mot de passe » . voilà

        Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *