AD 邮件账号到期提醒

cls  
#############################################################################  
# Description: The current script send Alert for users before they password 
# expires. You can set some values to configure this script.  
############################################################################  

###############################################################################  
# Get The max Password age from AD   
###############################################################################  

function Get-maxPwdAge{  
$root = [ADSI]"LDAP://dc01.domin.cn" 
$filter = "(&(objectcategory=domainDNS)(distinguishedName=DC=domin,DC=cn))" 
$ds = New-Object system.DirectoryServices.DirectorySearcher($root,$filter)  
$dc = $ds.findone()  
 [int64]$mpa = ($dc.Properties[‘maxpwdage’][0]).ToString().Trim("-")  
 return $mpa*(.000000100)/86400  
}  

###############################################################################  
# Function to send email to each user 
###############################################################################  
function send_email_user ($remaining_day, $email, $name )   
{  
        $today = Get-Date 
        $date_expire = [DateTime]::Now.AddDays($remaining_day);
       $date_expire = $date_expire.ToString("(yyyy-M-d)")  
    $SmtpClient = new-object system.net.mail.smtpClient   
    $mailmessage = New-Object system.net.mail.mailmessage   
    $SmtpClient.Host = "mail.domin.cn"   
    $mailmessage.from = "邮件系统管理员<mailadmin@domin.cn>"   
    $mailmessage.To.add($email)           
    #$mailmessage.Bcc.add("spam_admin@domin.cn")   
    $mailmessage.Subject = “【重要通知】您的邮件系统密码即将在 $remaining_day 天后到期,请尽快修改!”   
    $mailmessage.IsBodyHtml = $true 
    $encoding=[System.Text.Encoding]::unicode
        $mailmessage.Body = "尊敬的$name 您好,<br /><br />" 
        $mailmessage.Body +="<strong>        您的邮件账号 <font color=red>$email</font> 密码将在 <font color=red><strong>$remaining_day</strong></font> 天后到期,失效日期:<font color=red><strong>$date_expire</strong></font> ,请您尽快修改密码,以免影响您正常使用邮件系统。</strong><br /><br />" 
        $mailmessage.Body +="登录:https://mail.domin.cn 进行密码修改<br /><br />"
        $mailmessage.Body +="修改密码方法,请参照:<br /><br />"
        $mailmessage.Body +="http://www.domin.cn/support/chgpwd.html<br /><br />"
        $mailmessage.Body +="此邮件为系统自动通知邮件,请勿直接回复。<br /><br />"
        $mailmessage.Body +="如果您在操作过程中遇到任何问题,请随时联系IT部: <br /><br />"    
        $mailmessage.Body +=" <strong>        服务热线: <br /><br />"
        $mailmessage.Body +="        邮件地址:hotline@domin.cn  </strong><br />"
        $mailmessage.Body +="我们将竭诚为您提供IT技术支持服务。<br /><br />"
        $mailmessage.Body +="祝工作顺利。<br />"
        $mailmessage.Body +="集团<br />"
     $smtpclient.Send($mailmessage)   

}  

###############################################################################  
# Send REPORT for Admins  
###############################################################################  
function sendmail($body)  
{  
        $today = Get-Date 
    $SmtpClient = new-object system.net.mail.smtpClient   
    $mailmessage = New-Object system.net.mail.mailmessage   
    $SmtpClient.Host = "mail.domin.cn"   
    $mailmessage.from = "邮件系统管理员<mailadmin@domin.cn>"   
    $mailmessage.To.add("liyong@domin.cn") 
    #$mailmessage.Bcc.add("ithotline@domin.cn")   
    $mailmessage.Subject = “[Report] domin.cn password expires”   
    $mailmessage.IsBodyHtml = $true 
    $mailmessage.Body = "<h4>Generated on : $today `n</h4>"  + $body  
    $mailmessage.Body += "`n" +  $body1  

    $smtpclient.Send($mailmessage)   
}  

###############################################################################  
# Search for the active directory users with following conditions  
# 1. Is in USER category  
# 2. Is loged in more that 1 times - for eliminate the system accounts  
# 3. Eliminate the Disbaled Accounts  
###############################################################################  
$strFilter = "(&(objectCategory=User)(logonCount>=1)(!userAccountControl:1.2.840.113556.1.4.803:=2))" 
$objDomain = New-Object System.DirectoryServices.DirectoryEntry  
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher  
$objSearcher.SearchRoot = $objDomain  
$objSearcher.PageSize = 1000  
$objSearcher.Filter = $strFilter  
$colResults = $objSearcher.FindAll();  

#SET the max day  before expiration alert  
$max_alert = 7       ####这可修改7天前开始提醒

###############################################################################  
#SET the max password lifetime  
# In the future i rewrite to ask teh GP for the group.  
###############################################################################  

$max_pwd_life= get-maxPwdAge;   

$userlist = @()  

foreach ($objResult in $colResults)  

        {$objItem = $objResult.Properties;   
        if ( $objItem.mail.gettype.IsInstance -eq $True)   
                {                  
                        $user_name = $objItem.name 
                        $user_email = $objItem.email  
                        #Transform the DateTime readable  
                        $user_logon = [datetime]::FromFileTime($objItem.lastlogon[0])  
                        $result =  $objItem.pwdlastset   
                        $user_pwd_last_set = [datetime]::FromFileTime($result[0])                          

                        #calculate the difference in Day 
                        $diff_date = [INT]([DateTime]::Now - $user_pwd_last_set).TotalDays;  

                        if (($max_pwd_life - $diff_date) -le $max_alert) {  
                                $selected_user = New-Object psobject  
                                $selected_user | Add-Member NoteProperty -Name "Name" -Value  $objItem.name[0]  
                                $selected_user | Add-Member NoteProperty -Name "Email" -Value  $objItem.mail[0]  
                                $selected_user | Add-Member NoteProperty -Name "LastLogon" -Value $user_logon  
                                $selected_user | Add-Member NoteProperty -Name "LastPwdSet" -Value $user_pwd_last_set  
                                $selected_user | Add-Member NoteProperty -Name "EllapsedDay" -Value $diff_date  
                                $selected_user | Add-Member NoteProperty -Name "RemainingDay" -Value ($max_pwd_life-$diff_date)  
                                $userlist+=$selected_user  

                        }  
                }  
        }  

###############################################################################  
# Send email for each user 
###############################################################################  
        foreach ($userItem in $userlist )  
        {  
           send_email_user $userItem.RemainingDay $userItem.Email $userItem.Name 
          } 

###############################################################################  
# Sedn email for Admins in reporting format  
###############################################################################  
        $bodyme = $userlist| Sort-Object "RemainingDay" |  ConvertTo-Html -Title "AD password Status" -Body "<H3>Ad password expiration Status</H3> "  -head "<style>td{font-size:smaller;padding:0 0 0 5px;border: 1px solid #003366;}table{border: 1px solid #003366;margin:0;padding:0}tr{margin:0;padding:0;}h2{color:red};th{font-size:smaller;text-align:left;border: 1px solid #003366;background-color:#aaa;}</style>" | foreach {$_ -replace "<table>", "<table cellspacing=0>"}  

        sendmail $bodyme   

###############################################################################  
# END 
###############################################################################
相关文章
相关标签/搜索