通过PowerShell脚本,计算所有AD账户的密码过期时间,邮件地址通过AD用户的mail 字段获取, 配置在DC上运行一个每天运行一次的计划任务 ,最终效果就是在密码过期前的10台发邮件提醒,直到密码改掉了,或者密码过期了,就不再发了
Import-Module Activedirectory
#定义邮件发送参数
$SMTPServer = "smtpdm.aliyun.com"
#使用了加密端口,465端口如果发送不成功,可以尝试使用587端口,这里不介绍465和587端口的区别,有兴趣的可以自行百度查询,smtpdm.aliyun.com only works with port 80, without ssl.
$SMTPPort = "80"
$SMTPAccount = "sysadmin@abc.com"
$PlainTextPassword="*********"
$SecurePassword = ConvertTo-SecureString $PlainTextPassword -AsPlainText -Force
$SMTPCred = New-Object System.Management.Automation.PSCredential($SMTPAccount,$SecurePassword)
#$SecurePwd = Get-Content $SecureFile | ConvertTo-SecureString
#$SMTPCred = New-Object System.Management.Automation.PSCredential($SMTPAccount,$SecurePwd)
#查询指定OU符合条件的用户,这里筛选了未设置密码永不过期以及账号是启用状态的用户
$AllUser = Get-ADUser -searchbase "dc=owl,dc=local" -Filter 'PasswordNeverExpires -eq "false" -and enabled -eq "true"' | % {$_.SamAccountName}
#进入循环
foreach ($User in $AllUser){
#获取上次设置密码时间
$PwdLastset = Get-ADUser $User -Properties passwordlastset | % {$_.passwordlastset}
#计算过期日期,这里是90天过期
$PwdLastday = ($PwdLastset).AddDays(90)
#获取计算机当前日期,确保运行此脚本的计算机日期准确
$Now = Get-Date
#计算密码还剩多少天过期
$ExpireDays = ($PwdLastday - $Now).Days
#执行if语句,这判断过期日期是否小于等于10并且大于0,如果为真则发送邮件,配置在DC上运行一个每天运行一次的计划任务 ,最终效果就是在密码过期前的10台发邮件提醒,一直到密码过期如果还没有改,就不再提醒了
if($expiredays -le 14 -and $ExpireDays -gt "0"){
$DN = Get-ADUser $User -Properties Displayname | % {$_.Displayname}
$user +" " + $ExpireDays
$EmailAddress = Get-ADUser $User -Properties mail | % {$_.mail}
$EmailSubject = "您的AD账户密码即将过期"
#编写邮件正文,可以使用html编辑器进行编辑,需要注意的是HTML源代码一定要粘贴在@" "@中间
$Emailbody =
@"
<p><strong>$DN</strong> 你好:</p>
你的AD账户密码将在<strong>$ExpireDays</strong>天后过期 </br>
你也可以在接入公司内网或VPN网络后,通过https://password.owl.local 网页来更改密码
</p>
"@
#发送邮件
$EmailAddress
Send-MailMessage -SmtpServer $SMTPServer -Port $SMTPPort -From $SMTPAccount -Credential $SMTPCred -UseSsl -To $EmailAddress -Subject $EmailSubject -Bodyashtml $Emailbody -Encoding ([System.Text.Encoding]::UTF8)
}
}