viernes, 9 de abril de 2021

WINDOWS. PS. Alert and Check Password expiration policy

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 witPassword 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

           }

      }

  }

 

 Check Windows 

by GoN | Published: Apr 10, 2020 | Last Updated:

No hay comentarios: