windows AD域控密码过期邮件通知
利用poweshell脚本在域控服务器上查找即将过期的账号,并邮件推送至用户和管理员
- 结合Self Service Password系统使用特别完美
- Self Service Password的安装见: 微软AD域控自助改密系统搭建
2024年8月26日,建议观看迭代版本文章:windows AD域控密码过期邮件通知迭代版本
############################################
#Author: kidwu
#Email:
#For:检测AD密码过期时间并邮件通知
#Version:1.2
##############################################
Import-Module Activedirectory
# 定义获取AD用户的信息的OU,并设置仅查找非禁用状态用户
$alladuser=get-aduser -searchbase "OU=SEC,DC=sec,DC=lab" -filter {enabled -eq "true"} | %{$_.Samaccountname}
$userlist = @()
#################################################
#检测AD密码过期后发送邮件的邮箱
##################################################
$From ="xxx@qq.com"
$SMTPServer ="smtp.qq.com"
$SMTPPort ="587"
$Username = "xxx@qq.com"
$Password = "password"
# 密码加密
$SecurePassword = ConvertTo-SecureString $Password -AsPlainText -Force
$Credentials = New-Object System.Management.Automation.PSCredential($UserName, $SecurePassword)
# 设置推送至域管理员的邮箱
$managermail = "xxxx@qq.com"
#################################################
#检测AD密码过期时间并邮件通知相应账户
##################################################
foreach ($user in $alladuser){
#密码最后一次更改时间
$pwdlastset=Get-ADUser $user -Properties * | %{$_.passwordlastset}
#账号关联的邮箱,用于发送邮件
$usermail=Get-ADUser $user -Properties * | %{$_.mail}
#密码的过期时间为90天
$pwdlastday=($pwdlastset).adddays(90)
#当前时间
$now=get-date
#判断账户是否设置了永不过期
$neverexpire=get-aduser $user -Properties * |%{$_.PasswordNeverExpires}
#距离密码过期的时间
$expire_days=($pwdlastday - $now).Days
#判断过期时间天等于15天的并且没有设置密码永不过期的账户
if($expire_days -lt 15 -and $neverexpire -like "false"){
$chineseusername= Get-ADUser $user -Properties * | %{$_.Displayname}
#邮件正文
$Emailbody=
"亲爱的 $chineseusername 同学 :
您的域账户密码即将在 $expire_days 天后过期, $pwdlastday 之后密码过期未修改会导致您无法使用域账号登陆各种系统,请您尽快更改。
重置密码过程请遵循以下原则:
○ 密码长度最少 8 位;
○ 密码可使用最长时间 90天,过期需要更改密码;
○ 密码不得重新设置为初始密码;
○ 强制密码历史 2个(不能使用之前最近使用的 2 个密码);
○ 密码符合复杂性需求(大写字母、小写字母、数字和符号四种中必须有三种、且密码口令中不得包括全部或部分用户名)
密码修改系统如下:
○ 修改密码连接:密码修改的URL
○ 重置密码链接:密码重置系统的URL
谢谢,祝您生活愉快!
"
#################################################
#发送告警邮件
##################################################
Send-MailMessage -from $From -to $usermail -subject "您的账户密码即将过期" -body $Emailbody -smtpserver $SMTPServer -port $SMTPPort -UseSsl -Credential $credentials -Encoding ([System.Text.Encoding]::UTF8)
#############################################
#查找账户的密码过期时间并发送至管理员账户
#############################################
$username=Get-ADUser $user -Properties *
$userobject=New-object psobject
$userobject | Add-Member -membertype noteproperty -Name 用户名 -value $username.displayname
$userobject | Add-Member -membertype noteproperty -Name 邮箱 -Value $username.mail
$userobject | Add-Member -membertype noteproperty -Name 最后一次密码设置 -Value $username.Passwordlastset
$userobject | Add-Member -membertype noteproperty -Name 密码过期时间 -Value $pwdlastday
$userobject | Add-Member -membertype noteproperty -Name 距离密码过期天数 -Value $expire_days
$userlist+=$userobject
}
#判断过期时间天等于7天的并且没有设置密码永不过期的账户
elseif($expire_days -eq 7 -and $neverexpire -like "false"){
$chineseusername= Get-ADUser $user -Properties * | %{$_.Displayname}
#邮件正文
$Emailbody=
"亲爱的 $chineseusername 同学 :
您的域账户密码即将在 $expire_days 天后过期, $pwdlastday 之后密码过期未修改会导致您无法使用域账号登陆各种系统,请您尽快更改。
重置密码过程请遵循以下原则:
○ 密码长度最少 8 位;
○ 密码可使用最长时间 90天,过期需要更改密码;
○ 密码不得重新设置为初始密码;
○ 强制密码历史 2个(不能使用之前最近使用的 2 个密码);
○ 密码符合复杂性需求(大写字母、小写字母、数字和符号四种中必须有三种、且密码口令中不得包括全部或部分用户名)
密码修改系统如下:
○ 修改密码连接:密码修改的URL
○ 重置密码链接:密码重置系统的URL
谢谢,祝您生活愉快!
"
#################################################
#发送告警邮件
##################################################
Send-MailMessage -from $From -to $usermail -subject "您的账户密码即将过期" -body $Emailbody -smtpserver $SMTPServer -port $SMTPPort -UseSsl -Credential $credentials -Encoding ([System.Text.Encoding]::UTF8)
#############################################
#查找账户的密码过期时间并发送至管理员账户
#############################################
$username=Get-ADUser $user -Properties *
$userobject=New-object psobject
$userobject | Add-Member -membertype noteproperty -Name 用户名 -value $username.displayname
$userobject | Add-Member -membertype noteproperty -Name 邮箱 -Value $username.mail
$userobject | Add-Member -membertype noteproperty -Name 最后一次密码设置 -Value $username.Passwordlastset
$userobject | Add-Member -membertype noteproperty -Name 密码过期时间 -Value $pwdlastday
$userobject | Add-Member -membertype noteproperty -Name 距离密码过期天数 -Value $expire_days
$userlist+=$userobject
}
#判断过期时间天小于2天大于0天的并且没有设置密码永不过期的账户
elseif($expire_days -ge 0 -and $expire_days -le 2 -and $neverexpire -like "false"){
$chineseusername= Get-ADUser $user -Properties * | %{$_.Displayname}
#邮件正文
$Emailbody=
"亲爱的 $chineseusername 同学 :
您的域账户密码即将在 $expire_days 天后过期, $pwdlastday 之后密码过期未修改会导致您无法使用域账号登陆各种系统,请您尽快更改。
重置密码过程请遵循以下原则:
○ 密码长度最少 8 位;
○ 密码可使用最长时间 90天,过期需要更改密码;
○ 密码不得重新设置为初始密码;
○ 强制密码历史 2个(不能使用之前最近使用的 2 个密码);
○ 密码符合复杂性需求(大写字母、小写字母、数字和符号四种中必须有三种、且密码口令中不得包括全部或部分用户名)
密码修改系统如下:
○ 修改密码连接:密码修改的URL
○ 重置密码链接:密码重置系统的URL
谢谢,祝您生活愉快!
"
#################################################
#发送告警邮件
##################################################
Send-MailMessage -from $From -to $usermail -subject "您的账户密码即将过期" -body $Emailbody -smtpserver $SMTPServer -port $SMTPPort -UseSsl -Credential $credentials -Encoding ([System.Text.Encoding]::UTF8)
#############################################
#查找账户的密码过期时间并发送至管理员账户
#############################################
$username=Get-ADUser $user -Properties *
$userobject=New-object psobject
$userobject | Add-Member -membertype noteproperty -Name 用户名 -value $username.displayname
$userobject | Add-Member -membertype noteproperty -Name 邮箱 -Value $username.mail
$userobject | Add-Member -membertype noteproperty -Name 最后一次密码设置 -Value $username.Passwordlastset
$userobject | Add-Member -membertype noteproperty -Name 密码过期时间 -Value $pwdlastday
$userobject | Add-Member -membertype noteproperty -Name 距离密码过期天数 -Value $expire_days
$userlist+=$userobject
}
}
$EmailbodyHTML=$userlist|
sort-object 距离密码过期天数 |
ConvertTo-Html |
Out-String
Send-Mailmessage -from $From –to $managermail -Bodyashtml $EmailbodyHTML -Subject "管理员通知" -smtpserver $SMTPServer -port $SMTPPort -UseSsl -Credential $credentials -Encoding ([System.Text.Encoding]::UTF8)