Trouvez les utilisateurs d’Active Directory dont le mot de passe a expiré (PowerShell). Êtes-vous responsable de la gestion des mots de passe dans votre environnement Active Directory (AD) ? Une tâche cruciale est d’identifier les utilisateurs dont les mots de passe ont expiré , car ces utilisateurs ne pourront plus se connecter à leurs comptes tant qu’ils n’auront pas réinitialisé leurs mots de passe. Cet article vous montre comment utiliser efficacement PowerShell pour trouver les utilisateurs d’Active Directory dont les mots de passe ont expiré.
Commencerons-nous notre article de blog sur la recherche d’utilisateurs d’Active Directory dont le mot de passe a expiré (PowerShell) ?
Recherche des utilisateurs AD dont les mots de passe ont expiré en utilisant PowerShell
Suivre cet article permet de gagner du temps et des efforts, car nous ciblons rapidement des utilisateurs spécifiques pour les notifications de réinitialisation de mot de passe ou d’expiration. Que vous soyez un administrateur réseau ou simplement désireux d’améliorer la sécurité de votre environnement Active Directory, ce guide fournit les informations nécessaires pour commencer.
Prérequis
Si nous prévoyons de suivre cet article, nous aurons besoin des éléments suivants :
- A Windows computer joined to an Active Directory domain.
- Module ActiveDirectory installé sur l’ordinateur.
- L’ordinateur doit également disposer d’au moins Windows PowerShell 5.1 ou version ultérieure.
Recherche d’utilisateurs dans Active Directory
Avant de réinitialiser un mot de passe utilisateur, nous devons d’abord localiser le compte. Par conséquent, notre première étape devrait être de déterminer si une réserve existe. Pour ce faire, exécutez la commande Get-ADUser avec le paramètre Identity défini sur le nom du compte.
Le paramètre Identity accepte l’un des quatre identificateurs : nom distinctif (DN), GUID (objectGUID), ID de sécurité (objectSID), ou nom de compte SAM (SAMAccountName).
Par exemple, si nous demandons de réinitialiser le mot de passe pour un utilisateur spécifique, nous devrions d’abord vérifier que l’utilisateur existe avant d’émettre une réinitialisation de compte. Pour ce faire, copiez la commande suivante et collez-la dans notre console PowerShell. Assurez-vous de d’abord changer le nom d’utilisateur par le bon:
Get-ADUser -Identity
La commande a renvoyé les propriétés de l’utilisateur, comme le montre la capture d’écran ci-dessous, confirmant que le compte existe et que le nom d’utilisateur est correct:
Lire également Activer les rapports utilisateur Active Directory
Recherche des utilisateurs avec mot de passe expiré dans AD
Nous pouvons rapidement obtenir la date d’expiration du mot de passe pour un utilisateur unique en ajoutant et en utilisant l’attribut `msDS-UserPasswordExpiryTimeComputed` avec la commande `Get-ADUser` :
Get-ADUser -Identity USERNAME -Properties 'msDS-UserPasswordExpiryTimeComputed'
Mais cette ligne de code produira une sortie illisible pour l’humain, donc nous devons ajouter la ligne suivante pour convertir les résultats en un format lisible. Pour ajouter la ligne ci-dessous, nous utiliserons la commande `Select-Object -Property` sur un nouveau pipeline PowerShell :
Select-Object -Property {[datetime]::FromFileTime($_.”msDS-UserPasswordExpiryTimeComputed”)}
En exécutant le même attribut, `msDS-UserPasswordExpiryTimeComputed`, avec le bon filtre, nous obtenons une liste des comptes Active Directory et de leurs temps d’expiration de mot de passe :
Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "Displayname",@{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}

Nous améliorons le script ci-dessus en exportant la liste des utilisateurs dans un fichier texte que nous pourrions utiliser ultérieurement. Pour ce faire, nous pouvons utiliser la commande `Out-File` qui enverra la sortie vers un fichier texte :
Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "GivenName" |
Out-File -FilePath .\userslist.txt
Le script ci-dessus génère un fichier appelé userslist.txt que nous pouvons utiliser ultérieurement. Nous avons également omis la propriété ExpiryDate de la sortie car nous avons seulement besoin des identifiants d’utilisateur des comptes expirés. Nous utilisons cette liste pour la remédiation de masse, qui est discutée plus tard dans l’article.
Réinitialisation du mot de passe utilisateur Active Directory
Maintenant que nous avons appris comment utiliser Get-ADUser pour vérifier un compte utilisateur, nous savons que le résultat est valide et que l’ID utilisateur existe. Nous devons maintenant utiliser la cmdlet Set-ADAccountPassword pour réinitialiser le mot de passe de l’utilisateur.
La commande Set-ADAccountPassword change le mot de passe d’un utilisateur si nous fournissons l’ancien mot de passe. Si nous n’avons pas l’ancien mot de passe, la cmdlet le réinitialise avec le paramètre Reset.
Le nouveau mot de passe généré aléatoirement est un mot de passe aléatoire de 14 caractères avec cinq caractères non alphanumériques. Pour exécuter, ouvrez une fenêtre PowerShell, copiez le code, collez-le dans PowerShell, et appuyez sur Entrée:
$username = USERNAME
Add-Type -AssemblyName 'System.Web'
$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force
Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset |
Set-ADUser -ChangePasswordAtLogon true
$randomPassword
- Ligne 1: Spécifie le nom d’utilisateur dont le mot de passe doit être réinitialisé. Assurez-vous de remplacer la chaîne USERNAME par l’identifiant utilisateur réel.
- Ligne 2: Importe la classe d’objet assembly .NET System.Web.
- Ligne 3: Génère un mot de passe aléatoire qui fait 14 caractères de long avec cinq caractères non alphanumériques.
- Ligne 4: Convertit le mot de passe en texte brut en un objet mot de passe de type chaîne sécurisée.
- Ligne 5: Facilite la réinitialisation du mot de passe.
- Ligne 6: Contraint le compte AD à changer le mot de passe lors de la prochaine connexion.
- Ligne 7: Affiche le nouveau mot de passe dans la console. Cependant, nous ne recommandons pas cela pour des raisons de sécurité. La ligne 6 s’occupe du changement de mot de passe selon les préférences de l’utilisateur et est considérée comme la meilleure pratique pour cette procédure.
Améliorez la sécurité de votre Active Directory & Azure AD
Essayez-nous gratuitement, Accès à toutes les fonctionnalités. – Plus de 200 modèles de rapports AD disponibles. Personnalisez facilement vos propres rapports AD.
Lisez aussi Essayez les rapports de mot de passe Office 365
Écrire l’outil de réinitialisation du mot de passe Active Directory
Nous avons maintenant un script que nous utilisons pour réinitialiser le mot de passe d’un utilisateur. La prochaine étape consiste à transformer notre script en outil. Un outil réutilisable exécute les mêmes actions avec un minimum d’interventions manuelles de l’utilisateur.
Lors de la construction d’un outil, un aspect crucial est que quiconque exécute l’outil ne devrait pas avoir à modifier le code à chaque fois. Malheureusement, notre code nécessite toujours que l’utilisateur modifie la variable $username.
Au lieu d’autoriser les utilisateurs de notre outil à modifier les valeurs manuellement, pourquoi ne pas écrire un script qui accepte des paramètres ? Pour ce faire, suivez les étapes ci-dessous :
- Ouvrez Windows PowerShell ISE.
- Créez un nouveau fichier PowerShell et enregistrez le fichier sous le nom Reset-ADPassword.ps1. Enregistrez le script à l’emplacement de notre choix. Cet article enregistre le fichier dans le dossier C:\PS\scripts.
- Veuillez copier et coller le code ci-dessous dans notre éditeur de script avant d’enregistrer le script.
param (
$username
)
if (-not($username)) {
Write-Host "Username not found. Exiting script"
return $null
}
try {
$null = Get-ADUser -Identity $username -ErrorAction Stop
} catch {
Write-Host $_.Exception.Message
return $null
}
$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force
try {
Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset -ErrorAction Stop
Set-ADuser -Identity $username -ChangePasswordAtLogon $true
[pscustomobject]@{
Username = $username
NewPassword = $randomPassword
}
} catch {
Write-Host "There was an error performing the password reset. Please find additional information below."
Write-host $_.Exception.Message
return $null
}
- Ligne 1: Ajoute un paramètre appelé nom d’utilisateur.
- Ligne 5: Vérifie si l’utilisateur a fourni une valeur pour le nom d’utilisateur. Le if bloque également un message et quitte le script si la condition est remplie.
- Ligne 10: Vérifie si le nom d’utilisateur est valide ou non.
- Ligne 12: Valide si le nom d’utilisateur est invalide. Affiche un message et arrête l’exécution du script.
- Ligne 17: Génère un mot de passe aléatoire de 14 caractères avec cinq caractères non alphanumériques.
- Ligne 18: Convertit le mot de passe en texte brut en objet de mot de passe sécurisé.
- Ligne 20: Permet la réinitialisation du mot de passe.
- Ligne 22: Impose au compte AD de changer le mot de passe lors du prochain accès.
- Ligne 24: Affiche le nouveau mot de passe dans la console. Cependant, nous ne recommandons pas cela à des fins de sécurité. La ligne 6 prendra en charge le changement de mot de passe selon les préférences de l’utilisateur et est considérée comme la meilleure pratique pour cette procédure.
- Ligne 28: Affiche un message d’erreur si la réinitialisation a échoué.
Exécutions d’exemple de l’outil de réinitialisation du mot de passe AD
A PowerShell console pane is already available if we use Windows PowerShell ISE. If not, we should launch a separate PowerShell session. Change the current working directory to the destination folder where the script was saved, such as Set-Location C:\PS\Scripts.
Réinitialisation du mot de passe d’un seul utilisateur
Supposons que nous devons réinitialiser le mot de passe d’un utilisateur. Tout d’abord, exécutez l’outil de réinitialisation du mot de passe Active Directory et spécifiez quel nom d’utilisateur cibler. Par exemple, pour réinitialiser le mot de passe d’un seul utilisateur, exécutez le script comme indiqué ci-dessous:
.\Reset-ADPassword.ps1 -username USERNAME
En conséquence, le script réinitialise le mot de passe et le fait apparaître à l’écran. Par exemple, cette sortie envoie le nouveau mot de passe à l’utilisateur concerné:
Réinitialisation du mot de passe de plusieurs utilisateurs
Heureusement, nous pouvons parcourir une liste dans PowerShell à l’aide d’arrays et de la boucle foreach. De plus, le ForEach-Object cmdlet dans PowerShell nous permet de traiter plusieurs éléments simultanément. Ce cmdlet nous permet de passer divers éléments dans le pipeline.
Pour réinitialiser les mots de passe de plusieurs utilisateurs, créez un tableau avec deux ou plusieurs noms d’utilisateur. Les éléments du tableau sont ensuite passés dans le pipeline, où la commande ForEach-Object PowerShell exécute l’outil de réinitialisation du mot de passe sur chaque nom d’utilisateur.
@('user1', 'user2') | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}
Cependant, nous améliorons cela si nous réparons plus de deux comptes d’utilisateur. Souvenez-vous du fichier texte que nous avons généré plus tôt? Nous en faisons usage dans cette section.
Nous devons lire le fichier texte contenant les comptes utilisateur et exécuter l’outil de réinitialisation de mot de passe AD sur chacun d’eux. Pour ce faire, utilisez la cmdlet Get-Content pour importer le contenu du fichier texte dans PowerShell. Ensuite, le script envoie les données au pipeline et exécute le script de réinitialisation de mot de passe AD sur chaque compte.
Get-Content .\userslist.txt | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}
Après l’exécution du snippet ci-dessus, nous aurons réinitialisé plusieurs mots de passe d’utilisateur en une seule exécution.
Merci d’avoir lu l’article de blog Trouver des utilisateurs de l’Active Directory dont le mot de passe a expiré (PowerShell). Nous allons le conclure maintenant.
Conclusion de la recherche des utilisateurs AD dont les mots de passe ont expiré PowerShell
En conclusion, rechercher des utilisateurs de Active Directory avec des mot de passe expirés en utilisant PowerShell est un processus direct qui économise du temps et des efforts. En utilisant le cmdlet Get-ADUser et en filtrant les utilisateurs ayant un mot de passe expiré, vous pouvez rapidement identifier et cibler des utilisateurs spécifiques pour la réinitialisation du mot de passe ou les notifications d’expiration. Cette commande est pratique pour les organisations avec un grand nombre d’utilisateurs, car elle vous permet de gérer proactivement l’expiration des mots de passe et de réduire le risque de vulnérabilités.
Source:
https://infrasos.com/find-active-directory-users-with-expired-password-powershell/