PROJET AUTOBLOG


IT-Connect

Site original : IT-Connect

⇐ retour index

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

mercredi 29 juin 2016 à 09:50

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-ADAccountUser.

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

Set-ADAccountUser -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