Lister les utilisateurs dont le mot de passe a ou va expirer
Le script PowerShell suivant permettra de lister les utilisateurs Active Directory dont le mot de passe a ou va expirer.
| # Charger le module ActiveDirectory
Import-Module ActiveDirectory
# Obtenir la durée avant expiration des mots de passe
$MaxPwdAge = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.Days
$expiredDate = (Get-Date).AddDays(-$MaxPwdAge)
$ignorer_plus_vieux_que = 100 # Nombre de jours pour ignorer les comptes avec mot de passe trop ancien
$limiteDate = (Get-Date).AddDays(-$ignorer_plus_vieux_que - $MaxPwdAge)
# Récupérer tous les utilisateurs concernés
$allUsers = Get-ADUser -Filter 'PasswordNeverExpires -eq $false -and Enabled -eq $true' -Properties PasswordLastSet, Mail
# Filtrer les utilisateurs avec des mots de passe expirés et ceux sur le point d'expirer
$UsersWithExpiredPassword = @($allUsers | Where-Object { $_.PasswordLastSet -lt $expiredDate -and $_.PasswordLastSet -gt $limiteDate } | Select-Object samaccountname, PasswordLastSet, @{Name = "ExpirationDate"; Expression = {($_.PasswordLastSet).AddDays($MaxPwdAge)}}, @{Name = "DaysUntilExpired"; Expression = {($_.PasswordLastSet - $expiredDate).Days}} | Sort-Object PasswordLastSet)
$UsersWithExpiringPassword = @($allUsers | Where-Object { $_.PasswordLastSet -gt $expiredDate } | Select-Object samaccountname, PasswordLastSet, @{Name = "ExpirationDate"; Expression = {($_.PasswordLastSet).AddDays($MaxPwdAge)}}, @{Name = "DaysUntilExpired"; Expression = {($_.PasswordLastSet - $expiredDate).Days}} | Sort-Object DaysUntilExpired)
# Fusionner les listes en utilisant une boucle pour éviter l'erreur "op_Addition"
$AllUsers = $UsersWithExpiredPassword
foreach ($user in $UsersWithExpiringPassword) {
$AllUsers += $user
}
# Afficher les résultats dans un tableau avec des bordures
$AllUsers | Format-Table -AutoSize | Out-Host
# Poser la question pour l'exportation en CSV après l'affichage des résultats
$response = Read-Host "Voulez-vous exporter les résultats en CSV ? (O/N)"
if ($response -eq 'O') {
$csvPath = Join-Path -Path $PSScriptRoot -ChildPath "UserPasswordsReport.csv"
$AllUsers | Export-Csv -Path $csvPath -NoTypeInformation
Write-Host "Résultats exportés vers $csvPath"
}
|