Hola, me gustaría que me ayudarais, he creado un script de PowerShell para que mande correos a los usuarios de Active Directory que le quedan 14 días o menos para que le caduque la contraseña.
El problema viene ya que no todos los usuarios tienen definida sus cuentas de correo en el AD, solo están añadidas en algunos (que son los que necesitamos).
Entonces me devuelve el siguiente error al ejecutar el script:
Send-MailMessage : La cadena especificada no tiene la forma obligatoria para una dirección de correo electrónico.
En C:\Tareas_programadas\notificar_expiracion_pass.ps1: 39 Carácter: 5
- Send-MailMessage -from $de -to $para -Subject $asunto -Body $cuer ...
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- CategoryInfo : InvalidType: (:) [Send-MailMessage], FormatException
- FullyQualifiedErrorId : FormatException,Microsoft.PowerShell.Commands.SendMailMessage
El script completo es el siguiente:
Clear
Definición de variables
$hoy = Get-Date
$encoding = [System.Text.Encoding]::UTF8
$dias = 14
Importar módulo DA
Import-Module ActiveDirectory
Función enviar correo (Correo interno y texto plano)
function env_correo_int_txt ($correo,$nombreusr,$dif_dias,$dif_horas,$encoding)
{
$de = "******@juntadeandalucia.es"
$para = '$correo'
$servidorsmtp = "smtp.ceceu.junta-andalucia.es"
$asunto = "Su clave de dominio está próxima a caducar"
$cuerpo = "Buenas,
Sr(a). $nombreusr, se informa que la contraseña con la que accede a su equipo, caducará en $dif_dias dia(s) y $dif_horas hora(s), por lo cual se recomienda cambiarla antes de que esto ocurra.
Recuerda que puedes realizar el cambio de la clave así...
- Pulse de forma simultanea las teclas Control + Alt + Suprimir.
- De click sobre el botón ''Cambiar una contrasena''.
- ingrese su clave actual y luego la nueva en dos ocasiones.
- Oprima la tecla ''Enter'' o de click en la flecha ''-->''
Que pase un buen dia."
Send-MailMessage -from $de -to $para -Subject $asunto -Body $cuerpo -SmtpServer $servidorsmtp -Encoding UTF8
}
Obtener usuarios del DA y la fecha de expiración de su clave
$usuarios = Get-ADUser -SearchBase 'OU=07_Personal Externo a CECEU,DC=ceceu,DC=junta-andalucia,DC=es' -Filter {PasswordNeverExpires -eq $False -and Enabled -eq $True} –Properties DisplayName,EmailAddress,PasswordExpired,msDS-UserPasswordExpiryTimeComputed |
Select DisplayName,EmailAddress,PasswordExpired,@{Name="PasswordExpires";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}
Ciclo para recorrer usuarios
Foreach ($usr in $usuarios) {
$nombreusr = $usr.DisplayName
$correo = $usr.EmailAddress
If ($usr.PasswordExpired -eq $False) {
$dif_dias = ($usr.PasswordExpires - $hoy).days
$dif_horas = ($usr.PasswordExpires - $hoy).hours
If ($dif_dias -le $dias){
env_correo_int_txt $correo $nombreusr $dif_dias $dif_horas
Write-Host -Fore Green "Correo enviado a '$nombreusr'..."
}
}
}
Muchas gracias de antemano.