locked
Mot de passe AD - Script pour faire apparaitre une fenêtre avant expiration RRS feed

  • 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 &ecirctre expir&eacute dans $expireson jours.<br> 
        Merci de vous connecter d'ici ce d&eacutelai et d'effectuer la modification du mot de passe.<br>

        Au del&agrave de ce d&eacutelai, vous ne pourrez plus vous connecter et vous devrez contacter votre administrateur. 
        <p>Merci de votre compr&eacutehension<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 changes

    http://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