Question Age du mot de passe dans AD (Résolu)

Plus d'informations
il y a 17 ans 7 mois #2684 par rodriguez
Réponse de rodriguez sur le sujet Re:age du mot de passe dans AD.
Bonjour,

J'ai enfin trouvé comment contourner le problème d'un retour vide en se servant de \".PasswordLastChanged.dayofyear\"

[code:1]

$ldapquery = [ADSI] 'LDAP://OU=xxx,DC=xx,DC=xxx,DC=xxx'
$objrechercher = New-object system.directoryservices.directorysearcher($ldapQuery)
$objrechercher.filter='(&(objectClass=person)(objectCategory=person))'


$boucle = $objrechercher.findall()


foreach ($user in $boucle)
{


$name = $user.properties.name

foreach ($utilisateur in $name)
{
$userfinal = New-Object DirectoryServices.DirectoryEntry(\"LDAP://cn=$utilisateur,ou=xxx,DC=xx,DC=xxx,DC=xxx\"«»)
$change = $userfinal.PasswordLastChanged.dayofyear

$mail = $userfinal.mail


$date = get-date


$dayofyear = $date.dayofyear
if ($dayofyear > 275)
{
$difference = $change -365 + $dayofyear
$difference
}
else
{

$difference = $dayofyear - $change
}

$difference

if (($difference -ge 80) -and ( $difference -le 90 ))

{


$expediteur = \" xxx\"
$destinataire = \"$mail\"
$serveur = \"xxxxx\"

$objet = \"xxxxx \" + [System.DateTime]::Now
$texte = \"Bonjour,
Vous recevez ce mail car votre mot de passe d'ouverture de session Windows va bientot
expirer, merci de le renouveller dans les plus brefs délais.

Cordialement.

Mail automatique, ne pas répondre à ce mail. \"

$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte
$client = new-object System.Net.Mail.SmtpClient $serveur
$client.Credentials = [System.Net.CredentialCache]::«»DefaultNetworkCredentials
$client.Send($message)

}

}
}
[/code:1]

Voila j'espère que ça pourra aider du monde, ce script est lancé par un bat dans une tache planifié d'un DC... il est nécessaire d'avoir dans l'AD le champ mail de renseigné pour l'envois de mail vers les utilisateurs concernés. Surtout si vous n'avez pas exchange comme dans ma boite :dry:

Cache pas que je suis assez content d'avoir réussi à pondre ce script merci de votre aide...
Et au prochain numéro.<br><br>Message édité par: noxydius, à: 20/08/08 09:31

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 7 mois #2686 par Arnaud Petitjean
Bonjour Noxydus,

Merci pour ta contribution, nous intégrerons prochainement ton script dans la bibliothèque.

En attendant, si tu pouvais mettre quelques commentaires dans ton code, ainsi qu'un ou deux exemples d'utilisations et le résultat ça pourrait nous simplifier la tâche et aider les utilisateurs à mieux comprendre comment fonctionne ton script ;-)

A très bientôt,

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 7 mois #2692 par rodriguez
Réponse de rodriguez sur le sujet Re:age du mot de passe dans AD.
Merci pour le référencement ça fait toujours plaisir.

[code:1]

$ldapquery = [ADSI] 'LDAP://OU=Utilisateurs,DC=xx,DC=xx,DC=xx'
$objrechercher = New-object system.directoryservices.directorysearcher($ldapQuery)
$objrechercher.filter='(&amp;(objectClass=person)(objectCategory=person))'


$boucle = $objrechercher.findall()

#recherche dans l'AD du nom des utilisateurs

foreach ($user in $boucle)
{


$name = $user.properties.name

foreach ($utilisateur in $name)
{
#Mettre le nom d'utilisateur trouvé en variable pour récuperer les propriétés \&quot;PasswordLastChanged.dayofyear\&quot; qui retourne le jour de l'année
# que le mot de passe à été changé.
$userfinal = New-Object DirectoryServices.DirectoryEntry(\&quot;LDAP://cn=$utilisateur,ou=Utilisateurs,DC=xx,DC=xx,DC=xx\&quot;)
$change = $userfinal.PasswordLastChanged.dayofyear


# récuperation de son adresse email dans le champ messagerie de l'AD.
#rajout de @() pour considérer que même si y a pas de messagerie renseignée, le script ne par pas en erreur. la variable $mail reçoit la valeur $null
$mail = @($userfinal.mail)

# déterminer le jour de l'année.

$date = get-date


$dayofyear = $date.dayofyear

#celon le jour de l'année le calcul sera different pour pas se trouver en négatif enfin d'année, retention du mot de passe 90 Jours.
if ($dayofyear &gt; 275)
{
$difference = $change -365 + $dayofyear
$difference
}
else
{

$difference = $dayofyear - $change
}

$difference

#on recupere tous les utilisateurs dont le mot de passe est à 10 jours d'etre expirer.
if ($difference -eq 80)

{


# on envoi un mail individuel a chaque utilisateur concerné.

$expediteur = \&quot; xxx@xxx.fr\&quot;
$destinataire = \&quot;$mail\&quot;
$serveur = \&quot;xxxxx.fr\&quot;

$objet = \&quot;Expiration prochaine du mot de passe Windows.\&quot; + [System.DateTime]::Now
$texte = \&quot;Bonjour,
Vous recevez ce mail car votre mot de passe d'ouverture de session Windows va bientot
expirer, merci de le renouveller dans les plus brefs délais.

Cordialement.

Mail automatique, ne pas répondre à ce mail. \&quot;

$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte
$client = new-object System.Net.Mail.SmtpClient $serveur
$client.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
$client.Send($message)

}

}


}

[/code:1]

Exemple:
nous somme le mercredi 20/08 soit le 233ème jours de l'année.
nous rentrons dans la 2eme boucle du if car le jour est &lt; à 275.

Si un utilisateur a changé son mot de passe il y a 80 jours. alors il recevra un mail d'avertissement.

Message édité par: Arnaud, à: 20/08/08 12:50<br><br>Message édité par: noxydius, à: 21/08/08 14:01

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.089 secondes
Propulsé par Kunena