加密部分参考:http://www.bubuko.com/infodetail-1846894.html
首先将在某台主机上上建立一个share folder,设置权限为Everyone读取,里面将存储加密后的密码文件,文件命名为Password.txt。
新建一个加密的powershell文件,内容如下:用于把密码加密存储至Password.txt
$File = "\\SHSV2018\SharePath\Password.txt" [Byte[]] $key = (1..16) $Password = "P@ssword" | ConvertTo-SecureString -AsPlainText -Force $Password | ConvertFrom-SecureString -key $key | Out-File $File然后我们就可以直接在所需要调用密码的地方读取Password.txt,具体参见标红的部分
#leader的需求是,AD密码过期15天之前通过邮件通知用户,告知还有多少天密码就要过期了
#由于不是特别熟悉powershell,所以会写的比较笨,不过功能是实现了
#我们设置的是用户密码90天就过期
$File = "\\SHSV2018\SharePath\Password.txt"
[Byte[]] $key = (1..16)
$smtpPassword=Get-Content $File | ConvertTo-SecureString -Key $key
$user=Get-ADUser -searchbase 'OU=XX,DC=XX,DC=XX,DC=XX' -Filter * -Properties * |Select-Object displayname,passwordlastset,mail #这边的ou和DC填自己的,获取域账户所需的信息
$today=Get-Date #获取今天的日期
$today_75=$today.AddDays(-75) #获取75天的日期
$today_90=$today.AddDays(-90) #获取90天的日期
$Mailtouser=$user |Where-Object {$_.passwordlastset -le $today_75 -and $_.passwordlastset -ge $today_90 -and $_.passwordlastset -gt 0 -and $_.displayname -ne 'user1' -and $_.displayname -ne 'user2'} #获取需要邮件通知的用户,通过过期时间排除,其中也排除了user1和user2这样的特殊用户
$Mailusernum=$Mailtouser.Count #这样账户的总数
$MailtoAddress=$Mailtouser.mail #这些账户的mail邮箱
$Mailtouser_ed=$user |Where-Object {$_.passwordlastset -lt $today_90 -and $_.passwordlastset -gt 0 -and $_.displayname -ne 'user1' -and $_.displayname -ne 'user2'} #这是获取已经过期了的账户,其中也排除了user1和user2这样的特殊用户
$Mailusernum_ed=$Mailtouser_ed.Count #这样账户的总数
$MailtoAddress_ed=$Mailtouser_ed.mail #这些账户的mail邮箱
$smtpServer="smtp.exmail.qq.com" #你的smtp服务器,楼主的是qq
$smtpUser="xxx@qq.com" #账户
#$smtpPassword="password"#密码 注释掉
$mail=New-Object System.Net.Mail.MailMessage
$MailAddress="xxx@qq.com" #发件人地址
$mail.From=New-Object System.Net.Mail.MailAddress($MailAddress)
$mail.Subject="主题"
$smtp=New-Object System.Net.Mail.SmtpClient -ArgumentList $smtpServer
$smtp.Credentials=New-Object System.Net.NetworkCredential -ArgumentList $smtpUser,$smtpPassword
for ($i=0;$i -lt $Mailusernum;$i++) #循环并发送邮件----还有多少天过期
{
$mail.To.Add($MailtoAddress[$i])
$days_array=((New-TimeSpan $Mailtouser.passwordlastset[$i] -end $today_75).Days) #获取还有多少天过期
$mail.Body="你的密码还有$days_array 天过期了"
$smtp.Send($mail) #发送邮件
$mail.To.Clear()
}
{
$mail.To.Add($MailtoAddress_ed[$i])
$days_array=((New-TimeSpan $Mailtouser_ed.passwordlastset[$i] -end $today_90).Days)#获取你过期多少天了
$mail.Body="你的密码已经过期 $days_array 天了"
$smtp.Send($mail)
$mail.To.Clear()
}