powershell实现域用户密码到期邮件提醒功能

发布时间:2020-07-26 18:53:48 作者:brucesuncool
来源:网络 阅读:9235

最近要实现域用户密码到期后,自动发邮件提醒的功能。感觉用powershell实现起来比较方便。

查到的资料大多都是AD和Exchange安装在一起,不实用。

下面的代码是整合了网上的资料,实际可以运行的代码。

主要参考了:http://www.nibayuan.com/2014/12/31/task-ad-password-expires-email/

http://blog.csdn.net/andrewniu/article/details/52594318


说明:

  1. 服务器为windows server 2012 r2 std 中文版

  2. 此服务器只是DC,无其它功能。



Import-Module Activedirectory
$alladuser=get-aduser -searchbase "ou=xxx,dc=xxxxx,dc=xxxx" -filter *  | %{$_.Samaccountname}
#上面的“ou=***,dc=***,dc=***” 根据自己域结构实际情况填写
$userlist = @()

echo $alladuser#显示所有用户

#echo $userlist
$itmag = "xxxxx@xxxxxx.com" #IT管理员的邮件地址

function sendmail($mailaddr,$body) #定义发送邮件的方法
{  
$msg=New-Object System.Net.Mail.MailMessage  
$msg.To.Add($mailaddr)  
#$msg.Bcc.Add($itmag)#抄送给管理员
$msg.From = New-Object System.Net.Mail.MailAddress("xxxxx@xxxxxx.com", "xxxx",[system.Text.Encoding]::GetEncoding("UTF-8"))   #发件人
$msg.Subject = "邮件密码即将过期提醒"  
$msg.SubjectEncoding = [system.Text.Encoding]::GetEncoding("UTF-8")  
$msg.Body =$body  
#$Attachments=New-Object System.Net.Mail.Attachment("D:\Documents\xxxx.zip")#创建附件  
#$msg.Attachments.add($Attachments) #添加附件,英文名可多个,中文名就只能带一个。  
$msg.BodyEncoding = [system.Text.Encoding]::GetEncoding("UTF-8")  
$msg.IsBodyHtml = $false#发送html格式邮件  
#$msg.Priority = [System.Net.Mail.MailPriority]::High  
$client = New-Object System.Net.Mail.SmtpClient("smtp.xxxxxxx.cn")  #配置smtp服务器
$client.Port = 587#指定smtp端口
$client.EnableSsl = $true #带ssl功能的smtp服务器
$client.UseDefaultCredentials = $false  
$client.Credentials=New-Object System.Net.NetworkCredential("xxxx@xxx.com", "*********")  
try {$client.Send($msg)}  
    catch [Exception]
    {$($_.Exception.Message)  
    $mailaddr  
    }
}  


foreach ($user in $alladuser)
{
#密码最后一次更改时间
$pwdlastset=Get-ADUser $user -Properties * | %{$_.passwordlastset}
#密码的过期时间
$pwdlastday=$pwdlastset.AddDays(90)
#当前时间
$now=get-date
#判断账户是否设置了永不过期
$neverexpire=get-aduser $user -Properties * |%{$_.PasswordNeverExpires}
#距离密码过期的时间
$expire_days=($pwdlastday - $now).Days
#判断过期时间天小于5天大于-5天(即已过期5天)的并且没有设置密码永不过期的账户
if($expire_days -lt 5 -and $expire_days -gt -5 -and $neverexpire -like "false" )
{
$chineseusername= Get-ADUser $user  -Properties * | %{$_.Displayname}
#邮件正文
$Emailbody=
"Dear $chineseusername :
您的邮箱密码即将在 $expire_days 天后过期,请您尽快更改。
更改密码请遵循以下原则:
○密码长度最少 8 位;
○密码可使用最长时间 90天,过期需要更改密码;
○密码最短使用 1天( 1 天之内不能再次修改密码);
○强制密码历史 3个(不能使用之前最近使用的 3 个密码);
○密码符合复杂性需求(大写字母、小写字母、数字和符号四种中必须有三种、且密码口令中不得包括全部或部分用户名)
"

$tomailaddr = $user + "@xxxx.com"
#echo $tomailaddr
sendmail $tomailaddr $Emailbody
}

}

推荐阅读:
  1. 怎样通过Powershell命令核查被设置为密码永不过期的域用户账号
  2. Powershell-批量互换域用户属性信息

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

用户密码 powershell 实现域

上一篇:Juniper netscreen防火墙TFTP升级过程

下一篇:802.11n MCS速率表

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》