当新员工加入公司时,IT 技术人员必须在 Active Directory 中创建他们的账户。之后,IT 专员会逐一欢迎每位新员工,并帮助他们登录到域。在本文中,我将向你展示如何借助 PowerShell 脚本来自动化此流程。你可以随时编辑此脚本以满足你的特定需求。
本博文将重点涵盖以下三个主题:
- 将电子邮件密码以安全字符串(secure string)的形式读取,将其转换为加密字符串,并保存到文本文件中,以便普通用户无法读取。之后,脚本会读取该内容,并将其还原为安全字符串对象,以便在后续的电子邮件消息 cmdlet 中作为凭据使用。
- 创建一个脚本,用于识别过去 24 小时内在 AD 中新增的任何用户,并使用 Gmail 的 SMTP 服务器向他们发送欢迎电子邮件。
- 借助 PowerShell,在任务计划程序(Task Scheduler)中将脚本设置为每天凌晨 12:00 运行。
在本文中我使用了以下 cmdlet;每个 cmdlet 的详细信息可在 Technet 网站上查到。
- Read-Host(用于从命令行读取安全字符串(secure string),作为 Gmail 用户密码)
- Send-MailMessage(用于使用 SMTP 服务器发送电子邮件消息)
- Get-Date(用于获取当前日期和时间)
- Get-Content(用于从文件读取加密密码)
- Get-ADUser(用于从 AD 获取新添加的用户)
- New-ScheduledTaskTrigger(用于创建新的计划任务触发器)
- Register-ScheduledTask(用于在任务计划程序中安排新任务)
我已在 Windows Server 2016 上运行了此脚本。你可以根据你的环境需求对其进行编辑。请按以下三个步骤操作,以确保一切正常运行。
第 1 步:将你的 Gmail 密码以加密字符串的形式保存到文本文件中
以提升的权限打开 PowerShell 并执行以下 cmdlet。该命令会提示你以安全字符串(secure string)的形式输入密码,然后将其以加密字符串的形式保存到文本文件中。
Read-Host -AsSecureString | ConvertFrom-SecureString | Out-File “C:Userssecurepassword.txt”
第 2 步:将脚本保存为扩展名为 .ps1 的文件
打开记事本,将以下代码复制并粘贴。将文件保存为 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
第 3 步。使用任务计划程序来安排脚本
在记事本中创建一个新文件。粘贴以下脚本,并使用 .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 -Force
使用提升的权限在 PowerShell 中运行上面的脚本,就完成了!
当计划任务成功运行时,Active Directory 中新添加的用户将收到以下电子邮件:
希望这篇文章能对你有所帮助。欢迎随时提供反馈和评论,尤其是当此脚本中的某些内容无法正常工作时。祝你好运!
分享到
了解更多
关于作者
Karim Buzdar
支持工程师
IT 工程师,并获得服务器基础架构方向的 Microsoft Certified Solutions Associate (MCSA)。作为技术作者,Karim 关注 Microsoft Directory Services 和 PowerShell。