PowerShell檢測AD域用戶密碼到期郵件提醒

powershell檢測AD域用戶密碼到期郵件提醒腳本spring

  
  
  
  
  1.  
  2. $comments = @' author:fuhj(powershell@live.cn ,http://txj.shell.tor.hu)'@  
  3.  
  4. cls  
  5. #############################################################################  
  6. # Description: The current script send Alert for users before they password 
  7. # expires. You can set some values to configure this script.  
  8. ############################################################################  
  9.  
  10. ###############################################################################  
  11. # Get The max Password age from AD   
  12. ###############################################################################  
  13.  
  14. function Get-maxPwdAge{  
  15. $root = [ADSI]"LDAP://mydomain.local" 
  16. $filter = "(&(objectcategory=domainDNS)(distinguishedName=DC=codespring,DC=local))" 
  17. $ds = New-Object system.DirectoryServices.DirectorySearcher($root,$filter)  
  18. $dc = $ds.findone()  
  19.  
  20. [int64]$mpa = ($dc.Properties[‘maxpwdage’][0]).ToString().Trim("-")  
  21.  
  22. return $mpa*(.000000100)/86400  
  23. }  
  24.  
  25. ###############################################################################  
  26. Function to send email to each user 
  27. ###############################################################################  
  28. function send_email_user ($remaining_day, $email, $name )   
  29. {  
  30.         $today = Get-Date 
  31.         $date_expire = [DateTime]::Now.AddDays($remaining_day) ;  
  32.     $SmtpClient = new-object system.net.mail.smtpClient   
  33.     $mailmessage = New-Object system.net.mail.mailmessage   
  34.     $SmtpClient.Host = "smtp.mydomain.local"   
  35.     $mailmessage.from = "it@mydomain.local"   
  36.     $mailmessage.To.add($email)           
  37.         $mailmessage.Bcc.add("it-reports@mydomain.local")   
  38.     $mailmessage.Subject = 「$name, your password expires on mydomain.local 」   
  39.     $mailmessage.IsBodyHtml = $true 
  40.     $mailmessage.Body = "<h1>Dear $name </h1>" 
  41.         $mailmessage.Body +="<h5> Your password for account <font color=red>$email</font> will be expirend in <font color=red><strong>$remaining_day</strong></font> days on <strong>$date_expire</strong></h5>" 
  42.         $mailmessage.Body +="For other question please ask the Administrators !<br /><br />" 
  43.     $mailmessage.Body += " Generated on : $today<br /><br />" 
  44.         $mailmessage.Body += "================================== <br />" 
  45.         $mailmessage.Body += "mydomain.local <br />" 
  46.     $smtpclient.Send($mailmessage)   
  47. }  
  48.  
  49. ###############################################################################  
  50. # Send REPORT for Admins  
  51. ###############################################################################  
  52. function sendmail($body)  
  53. {  
  54.         $today = Get-Date 
  55.     $SmtpClient = new-object system.net.mail.smtpClient   
  56.     $mailmessage = New-Object system.net.mail.mailmessage   
  57.     $SmtpClient.Host = "smtp.mydomain.local"   
  58.     $mailmessage.from = "it@mydomain.local"   
  59.     $mailmessage.To.add("it-reports@mydomain.local")   
  60.     $mailmessage.Subject = 「[Report] mydomain.local password expires」   
  61.     $mailmessage.IsBodyHtml = $true 
  62.     $mailmessage.Body = "<h4>Generated on : $today `n</h4>"  + $body  
  63.     $mailmessage.Body += "`n" +  $body1  
  64.           
  65.     $smtpclient.Send($mailmessage)   
  66. }  
  67.  
  68. ###############################################################################  
  69. # Search for the active directory users with following conditions  
  70. # 1. Is in USER category  
  71. # 2. Is loged in more that 1 times - for eliminate the system accounts  
  72. # 3. Eliminate the Disbaled Accounts  
  73. ###############################################################################  
  74. $strFilter = "(&(objectCategory=User)(logonCount>=1)(!userAccountControl:1.2.840.113556.1.4.803:=2))" 
  75. $objDomain = New-Object System.DirectoryServices.DirectoryEntry  
  76. $objSearcher = New-Object System.DirectoryServices.DirectorySearcher  
  77. $objSearcher.SearchRoot = $objDomain  
  78. $objSearcher.PageSize = 1000  
  79. $objSearcher.Filter = $strFilter  
  80. $colResults = $objSearcher.FindAll();  
  81.  
  82. #SET the max day  before expiration alert  
  83. $max_alert = 10   
  84.  
  85. ###############################################################################  
  86. #SET the max password lifetime  
  87. In the future i rewrite to ask teh GP for the group.  
  88. ###############################################################################  
  89.  
  90. $max_pwd_life= get-maxPwdAge;   
  91.  
  92. $userlist = @()  
  93.  
  94. foreach ($objResult in $colResults)  
  95.  
  96.         {$objItem = $objResult.Properties;   
  97.         if ( $objItem.mail.gettype.IsInstance -eq $True)   
  98.                 {                  
  99.                         $user_name = $objItem.name 
  100.                         $user_email = $objItem.email  
  101.                         #Transform the DateTime readable  
  102.                         $user_logon = [datetime]::FromFileTime($objItem.lastlogon[0])  
  103.                         $result =  $objItem.pwdlastset   
  104.                         $user_pwd_last_set = [datetime]::FromFileTime($result[0])                          
  105.                           
  106.                         #calculate the difference in Day 
  107.                         $diff_date = [INT]([DateTime]::Now - $user_pwd_last_set).TotalDays;  
  108.                                                   
  109.                           
  110.                         if (($max_pwd_life - $diff_date) -le $max_alert) {  
  111.                                 $selected_user = New-Object psobject  
  112.                                 $selected_user | Add-Member NoteProperty -Name "Name" -Value  $objItem.name[0]  
  113.                                 $selected_user | Add-Member NoteProperty -Name "Email" -Value  $objItem.mail[0]  
  114.                                 $selected_user | Add-Member NoteProperty -Name "LastLogon" -Value $user_logon  
  115.                                 $selected_user | Add-Member NoteProperty -Name "LastPwdSet" -Value $user_pwd_last_set  
  116.                                 $selected_user | Add-Member NoteProperty -Name "EllapsedDay" -Value $diff_date  
  117.                                 $selected_user | Add-Member NoteProperty -Name "RemainingDay" -Value ($max_pwd_life-$diff_date)  
  118.                                 $userlist+=$selected_user  
  119.                           
  120.                         }  
  121.                 }  
  122.         }  
  123.           
  124. ###############################################################################  
  125. # Send email for each user 
  126. ###############################################################################  
  127.         foreach ($userItem in $userlist )  
  128.         {  
  129.                 send_email_user $userItem.RemainingDay $userItem.Email $userItem.Name 
  130.         }  
  131.           
  132. ###############################################################################  
  133. # Sedn email for Admins in reporting format  
  134. ###############################################################################  
  135.         $bodyme = $userlist| Sort-Object "RemainingDay" |  ConvertTo-Html -Title "AD password Status" -Body "<H2>Ad password expiration Status</H2> "  -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>"}  
  136.           
  137.         sendmail $bodyme   
  138.           
  139.                   
  140. ###############################################################################  
  141. END 
  142. ############################################################################### 
相關文章
相關標籤/搜索