Purpose
Check your GPO "Default domain Policy" to view the password Policy and send one email to inform the User with the days expire password.
the variable "$expireindays" defines the days before it will warn until the password changes.
This post exclude check "Fine Grained Passwords"
The PS Code:
#Primary mail variables
$SmtpServer="X.X.X.X"
$From= IT@Micompany.com
#Starting expire check in days pending Expire to alert
$expireindays=8
#Getting users array from all AD
$users=Get-ADuser -Properties Name, PasswordNeverExpires, PasswordExpired, PasswordLastSet, EmailAddress -Filter
*
foreach ($user
in
$users) {
#Get the Name attribute for message purposes
$Name
= (Get-ADUser
$user
|
ForEach-Object {
$_.Name })
# Exclude user with Password Never Expires activate
if ($user.PasswordNeverExpires)
{
#Informative message if script is executed via Powershell directly
Write-Host
$user.Name
"- INFO: o que no le caduque la contraseña"
-ForegroundColor
Red
}
else
{
#Setting expiration date parameter for user
$passwordSetDate
= (Get-ADUser
$user
-properties
*
|
ForEach-Object {$_.PasswordLastSet})
# ChecK the domain policy
$maxPasswordAge
= (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.Days
$Expireson=
$passwordSetDate.AddDays($maxPasswordAge)
#Getting script execution day date
$today=Get-Date
#Obtaining remaining days to expire password for user
$daystoexpire=(New-TimeSpan
-Start
$today
-End
$Expireson).Days
#Obtaining mail attribute from
user
$emailaddress=$user.EmailAddress
#Condition
that executes the mail advise if remaining days for password expiration
are less than $expireindays variable and if is not expired (0 days
remaining)
If (($daystoexpire
-ge
"0")
-and ($daystoexpire
-lt
$expireindays)) {
#Informative message if script is executed via Powershell directly
"$Date
- INFO: Sending expiry notice email to $name"
Write-Host
"Sending Password expiry email to
$name - le faltan
$daystoexpire"
-ForegroundColor
Yellow
$UserPasswordLastSet=$user.PasswordLastSet
#Condition to attach the body message for email
if($daystoexpire
-eq
"1"){
$EmailBody="ULTIMO
AVISO! La contraseña de WINDOWS del usuario $name caducará en
$daystoexpire dia. Le recomendamos que cambie la clave antes de que expire el periodo indicado.
La última vez que modificó su contraseña fue
$UserPasswordLastSet
Recuerde que usted es responsable de cualquier acción o actividad que se realice con su usuario y clave,
por ello es muy importante
- La contraseña es personal e intransferible. No comparta la contraseña con nadie
- Elija contraseñas seguras fáciles de recordar y difíciles de adivinar para usted.
- La contraseña debe ser de longitud mínima 8 caracteres combinando letras, números, mayúsculas/minúsculas
y símbolos. No utilice series.
- Evite poner palabras relacionadas con tus datos personales o de la empresa.
- Procure hacer faltas de ortografía, evita ataques de diccionario.
- No debe anotar o almacenar las contraseñas en ningún tipo de soporte sin cifrar, ni utilizar programas,
utilidades o cualquier otro proceso automático de login automático no autorizado.
Si tiene sospechas que su contraseña ha dejado de ser secreta cámbiela inmediatamente.
Departamento de Sistemas de MyCompany"
}
else {
$EmailBody="La
contraseña de WINDOWS del usuario $name caducará en
$daystoexpire dias. Le recomendamos que cambie la clave antes de que expire el periodo indicado.
La última vez que modificó su contraseña fue
$UserPasswordLastSet
Recuerde que usted es responsable de cualquier acción o actividad que se realice con su usuario y clave,
por ello es muy importante:
- La contraseña es personal e intransferible. No comparta la contraseña con nadie
- Elija contraseñas seguras fáciles de recordar y difíciles de adivinar para usted.
- La contraseña debe ser de longitud mínima 8 caracteres combinando letras, números, mayúsculas/minúsculas
y símbolos. No utilice series.
- Evite poner palabras relacionadas con tus datos personales o de la empresa.
- Procure hacer faltas de ortografía, evita ataques de diccionario.
- No debe anotar o almacenar las contraseñas en ningún tipo de soporte sin cifrar, ni utilizar programas,
utilidades o cualquier otro proceso automático de login automático no autorizado.
Si tiene sospechas que su contraseña ha dejado de ser secreta cámbiela inmediatamente.
Departamento de Sistemas de Micomapny"
}
$EmailSubj="Mycompany.
Aviso de caducidad de password de tu usuario"
#Create and send an email
object
$SMTPClient
=
New-Object
Net.Mail.SMTPClient($SmtpServer)
$emailMessage
=
New-Object
System.Net.Mail.MailMessage
$emailMessage.From
=
"$From"
Foreach($EmailTo
in
$emailaddress)
{
$emailMessage.To.Add($EmailTo)
}
$emailMessage.Subject
=
"$EmailSubj"
$emailMessage.Body
=
"$EmailBody"
$SMTPClient.Send($emailMessage)
#Informative message if script is executed via Powershell directly
Write-Host
"Sending E-mail to
$emailaddress..."
-ForegroundColor
Green
}
Else {
#Informative message if script
is executed via Powershell directly
#Te informa de los que no ha expirado
"$Date - INFO:
Password for $Name not expiring for
$daystoexpire days"
Write-Host
"Password for
$Name does not expire for
$daystoexpire days"
-ForegroundColor
White
}
}
}