Script de PowerShell: descubrir nuevos usuarios en Active Directory
Cuando nuevos empleados se unen a una empresa, los técnicos de TI deben crear sus cuentas en Active Directory. Posteriormente, el especialista en TI da la bienvenida a cada recién llegado y les ayuda a iniciar sesión en el dominio. En este artículo, le mostraré cómo automatizar este procedimiento con la ayuda de secuencias de comandos de PowerShell. Siéntase libre de editar este script para adaptarlo a sus necesidades particulares.
Esta publicación de blog cubre específicamente los siguientes tres temas:
- Lea la contraseña del correo electrónico como una cadena segura, conviértala en una cadena cifrada y guárdela en un archivo de texto para que los usuarios normales no puedan leerla. Posteriormente, el script lo lee y lo invierte en un objeto de cadena seguro para usarlo como credencial en cmdlets de mensajes de correo electrónico posteriores.
- Cree una secuencia de comandos para identificar a los nuevos usuarios agregados en AD en las últimas 24 horas y envíeles un correo electrónico de bienvenida utilizando el servidor SMTP de Gmail.
- Programe el script para que se ejecute diariamente a las 12:00 a. m. en el Programador de tareas con la ayuda de PowerShell.
He utilizado los siguientes cmdlets en esta publicación; Los detalles de cada cmdlet están disponibles en el sitio web de Technet.
- Read-Host (para leer la cadena segura desde una línea de comando como contraseñas de usuario de Gmail)
- Send-MailMessage (para enviar mensajes de correo electrónico utilizando un servidor SMTP)
- Get-Date (para obtener la fecha y hora actuales)
- Get-Content (para leer una contraseña cifrada de un archivo)
- Get-ADUser (para obtener usuarios recién agregados desde AD)
- New-ScheduledTaskTrigger (para crear un nuevo activador de tarea programada)
- Register-ScheduledTask (para programar la nueva tarea en el Programador de tareas)
Ejecuté este script en Windows Server 2016. Puede editarlo de acuerdo con las necesidades de su entorno. Siga estos tres pasos para que todo funcione.
Paso 1. Guarde su contraseña de Gmail como una cadena cifrada en un archivo de texto
Abra PowerShell con privilegios elevados y ejecute el siguiente cmdlet. Esto le solicitará que ingrese una contraseña como una cadena segura y la guarde en un archivo de texto como una cadena cifrada.
Read-Host -AsSecureString | ConvertFrom-SecureString | Out-File “C:Userssecurepassword.txt”
Paso 2. Guarde el script en un archivo con extensión .ps1
Abra el Bloc de notas y copie y pegue el siguiente código. Guarde el archivo como FindOutADUsers.ps1.
##Beginning of functions
Function Send-Email {
Param ($Email, $Credential,$attachment)
$From = "karim.buzdar@gmail.com"
$subject = "Welcome to yourdomain.com"
$SMTPServer = "smtp.gmail.com"
$SMTPPort = "587"
### Beginning of email body
$Body = "Dear User,<br><br>"
$Body += "Welcome to yourdomain.com <br><br>"
$Body += " This email will help you log in to your domain services. Follow these steps to log in to your domain: <br><br>"
$Body += "Step 1. Enter your username <br><br>"
$Body += "Step 2. Enter your password, and press enter <br><br>"
$Body += " Please check the attached screenshot. If you have any problems, please call the help desk at following number: <br><br>"
$Body += "<b>Extension No: 121</b><br><br>"
$Body += "Regards,<br><br>"
$Body += "Yourdomain.com Helpdesk"
### End of email body
Send-MailMessage -from $From -to $Email -Subject $subject -BodyAsHtml $Body -Attachments $attachment -SmtpServer $SMTPServer -Port $SMTPPort -Credential $Credential -UseSsl
}
### End of Functions
##### Beginning of main function
$When = ((Get-Date).AddDays(-1))
$UserName = "karim.buzdar@gmail.com" #Gmail username which is used for sending an email
$Password = Get-Content "C:UsersAdministrator.YOURDOMAINDesktopFindOutADUserssecurepassword.txt" | ConvertTo-SecureString #Reading a secure password from file and reversing it back into a secure string object
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList ($UserName, $Password) #PSCredential for send-mail message cmdlet
$Attachment = "C:UsersAdministrator.YOURDOMAINDesktopFindOutADUsersScreenshot.png" #Image sending as an attachment with email
foreach ($EmailAddress in Get-ADUser -filter {(whencreated -ge $When)} -Properties emailaddress | Select -ExpandProperty emailaddress) #Iterating over each email of users
{
Send-Email -Email $EmailAddress -Credential $Credential -attachment $Attachment
Write-Host "Email sent: $EmailAddress"
}
### End of main function
Paso 3. Programe el script usando el Programador de tareas
En el Bloc de notas, cree un nuevo archivo. Pegue el siguiente script y guárdelo con la extensión .ps1.
$Trigger= New-ScheduledTaskTrigger -At 12:00am -Daily #Trigger the task daily at 12 AM
$User= "yourdomainadministrator"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument
"C:UsersAdministrator.YOURDOMAINDesktopFindOutADUsersFindOutADUsers.ps1"
Register-ScheduledTask -TaskName "FindOutADUsers" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest -ForceEjecute el script anterior en PowerShell con privilegios elevados y ¡listo!
Cuando una tarea programada se ejecuta correctamente, los usuarios recién agregados en Active Directory recibirán el siguiente correo electrónico:
Espero que esta publicación te sea útil. Sus opiniones y comentarios siempre son bienvenidos, especialmente si algo no funciona en este script. ¡Buena suerte!
