Meilleur auteur de réponses
Mot de passe AD - Script pour faire apparaitre une fenêtre avant expiration

Question
-
Bonjour
Actuellement j'ai mis en place une stratégie d'expiration des mot de passe aux 90 jours.
Le problème c'est qu'il y a bien une petite notification qui apparait demandant aux utilisateurs de changer le mot de passe puisque celui va arriver à expiration, mais la pluaprt du temps ils n'en tiennent pas compte et au final le change trop tard et sont bloqués (le mappage des lecteurs réseaux ne fonctionne plus..
J'aimerais mettre en place un script qui s'execute X jours avant l'expiration du MDP et qui affiche un message du style 'Attention, votre mot de passe expirera dans X jours'. Mettre ça à l'ouverture de session, ça sera déjà plus visible que le petit pop-up proposé par MS.
Avez-vous une idée si c'est faisable ? Aussi envoyer un courriel les avisant du nombre de jours avant expiration ?
Merci
mardi 6 octobre 2015 13:44
Réponses
-
Finalement j'ai trouvé :
'======================================== ' First, get the domain policy. '======================================== Dim oDomain Dim oUser Dim maxPwdAge Dim numDays Dim warningDays warningDays = 6 Set LoginInfo = CreateObject("ADSystemInfo") Set objUser = GetObject("LDAP://" & LoginInfo.UserName & "") strDomainDN = UCase(LoginInfo.DomainDNSName) strUserDN = LoginInfo.UserName Set oDomain = GetObject("LDAP://" & strDomainDN) Set maxPwdAge = oDomain.Get("maxPwdAge") '======================================== ' Calculate the number of days that are ' held in this value. '======================================== numDays = CCur((maxPwdAge.HighPart * 2 ^ 32) + _ maxPwdAge.LowPart) / CCur(-864000000000) 'WScript.Echo "Maximum Password Age: " & numDays '======================================== ' Determine the last time that the user ' changed his or her password. '======================================== Set oUser = GetObject("LDAP://" & strUserDN) '======================================== ' Add the number of days to the last time ' the password was set. '======================================== whenPasswordExpires = DateAdd("d", numDays, oUser.PasswordLastChanged) fromDate = Date daysLeft = DateDiff("d",fromDate,whenPasswordExpires) 'WScript.Echo "Password Last Changed: " & oUser.PasswordLastChanged if (daysLeft < warningDays) and (daysLeft > -1) then Msgbox "Password Expires in " & daysLeft & " day(s)" & " at " & whenPasswordExpires & chr(13) & chr(13) & "Once logged in, press CTRL-ALT-DEL and" & chr(13) & "select the 'Change a password' option", 0, "PASSWORD EXPIRATION WARNING!" End if '======================================== ' Clean up. '======================================== Set oUser = Nothing Set maxPwdAge = Nothing Set oDomain = Nothing
- Marqué comme réponse Emile Supiot mardi 13 octobre 2015 09:24
mardi 6 octobre 2015 17:50
Toutes les réponses
-
Bonjour,
Pour moi, il est possible de faire ce genre de script. Par contre, il devra s'executer à chaque ouverture de session et n'afficher la fenetre que lorsque l'expiration arrive à X jours.
Vous trouverez plein d'exemples sur internet de scripts lisant ces informations dans l'active directory en fonction des utilisateurs.
Cordialement
S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution. Mon blog : http://Les2t.fr
mardi 6 octobre 2015 14:00 -
Il existe des scripts powershell pour notifier par mot de passe avant expiration, comme par exemple
http://www.alexgiraud.net/blog/Lists/Billets/Post.aspx?ID=303
mardi 6 octobre 2015 14:01 -
# Variables
$smtpServer = "smtp.domain.local" ---> Mon serveur de messagerie
$from = alert-password@domain.local ---> Une adresse courriel existante ?
$smtp_username = "DOMAIN\SmtpUser" ---> Quel utilisateurs ?
$smtp_password = ConvertTo-SecureString "Mot2Pass" -AsPlainText -Force ---> Quel mot de passe ?
$smtp_credentials = New-Object System.Management.Automation.PSCredential($smtp_username, $smtp_password)
$expireindays = 20
$maxPasswordAge = 90
$OUpath = "OU=HelpDeskUsers,OU=IT,DC=domain,DC=local" ---> Quel chemin dois-je configurer ?
$today = (get-date)# Recherche des utilisateurs activés qui ont un mot de passe qui expire
$users = Get-ADUser -SearchBase $OUpath -Properties GivenName,mail,PasswordLastSet-Filter {(PasswordNeverExpires -eq "False") -and (Enabled -eq "True")}
foreach ($user in $users){
# Informations du compte utilisateur
$Name = $user.GivenName
$emailaddress = $user.mail# Recherche en jours de la dernière modification du mot de passe
$passwordSetDate = $user.PasswordLastSet
$lastset_days = (New-TimeSpan -Start $today -End $passwordSetDate).Days# Expire dans x jours en comparaison avec la date de modification, et la durée max autorisée
$expireson = $lastset_days + $maxPasswordAge# Préparation du message email
$subject="IT Services : Attention, expiration du mot de passe dans $expiresonjours"
$body ="
Bonjour $name,
<p> Votre mot de passe IT va être expiré dans $expireson jours.<br>
Merci de vous connecter d'ici ce délai et d'effectuer la modification du mot de passe.<br>Au delà de ce délai, vous ne pourrez plus vous connecter et vous devrez contacter votre administrateur.
<p>Merci de votre compréhension<br>
</P>"# Envoi du mail si l'expiration est < 20 jours
if ($expireson -lt $expireindays)
{
echo "Attention : Le compte de $Name expire bientôt ($expireson jours). Envoi d'un mail vers $emailaddress en cours"
Send-Mailmessage -smtpServer $smtpServer -from $from -to $emailaddress -subject$subject -body $body -bodyasHTML -priority High -credential $smtp_credentials
}
else
{
echo "Information : Le compte de $Name expire dans $expireson jours. Aucun émail vers $emailaddress ne sera envoyé"
}
}mardi 6 octobre 2015 14:10 -
Bonjour
Je sais que ca ne repond pas forcement a ton besoin, mais tu as aussi un petit logiciel qui envoie par email tous les jours un rappelle. Tu as une version gratuite et payante.
J'utilise dans ma compagnie la version gratuite, et je t assure que tu es tanné de recevoir ce email alors tu le changeshttp://www.netwrix.com/password_expiration_alerting_editions.html
Francis Bonnamour
mardi 6 octobre 2015 14:30 -
Merci Francis,
Je suppose qu'il faut installer ça sur le DC ?
mardi 6 octobre 2015 14:32 -
Finalement j'ai trouvé :
'======================================== ' First, get the domain policy. '======================================== Dim oDomain Dim oUser Dim maxPwdAge Dim numDays Dim warningDays warningDays = 6 Set LoginInfo = CreateObject("ADSystemInfo") Set objUser = GetObject("LDAP://" & LoginInfo.UserName & "") strDomainDN = UCase(LoginInfo.DomainDNSName) strUserDN = LoginInfo.UserName Set oDomain = GetObject("LDAP://" & strDomainDN) Set maxPwdAge = oDomain.Get("maxPwdAge") '======================================== ' Calculate the number of days that are ' held in this value. '======================================== numDays = CCur((maxPwdAge.HighPart * 2 ^ 32) + _ maxPwdAge.LowPart) / CCur(-864000000000) 'WScript.Echo "Maximum Password Age: " & numDays '======================================== ' Determine the last time that the user ' changed his or her password. '======================================== Set oUser = GetObject("LDAP://" & strUserDN) '======================================== ' Add the number of days to the last time ' the password was set. '======================================== whenPasswordExpires = DateAdd("d", numDays, oUser.PasswordLastChanged) fromDate = Date daysLeft = DateDiff("d",fromDate,whenPasswordExpires) 'WScript.Echo "Password Last Changed: " & oUser.PasswordLastChanged if (daysLeft < warningDays) and (daysLeft > -1) then Msgbox "Password Expires in " & daysLeft & " day(s)" & " at " & whenPasswordExpires & chr(13) & chr(13) & "Once logged in, press CTRL-ALT-DEL and" & chr(13) & "select the 'Change a password' option", 0, "PASSWORD EXPIRATION WARNING!" End if '======================================== ' Clean up. '======================================== Set oUser = Nothing Set maxPwdAge = Nothing Set oDomain = Nothing
- Marqué comme réponse Emile Supiot mardi 13 octobre 2015 09:24
mardi 6 octobre 2015 17:50