Advertisement
M1st3rS1r

Email PW Reset

Dec 22nd, 2016
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. $ascii=$NULL;For ($a=48;$a –le 122;$a++) {$ascii+=,[char][byte]$a}
  2.  
  3. function Get-Password
  4.     {
  5.         Param
  6.             (
  7.             $Length=10,
  8.             $SourceData=$ascii
  9.             )
  10.  
  11.         For($loop=1; $loop -le $length; $loop++)
  12.             {
  13.                 $Password+=($SourceData | Get-Random)
  14.             }
  15.         return $Password
  16.     }
  17.  
  18. Add-type -AssemblyName “Microsoft.Office.Interop.Outlook” | Out-Null
  19. $olFolders = “Microsoft.Office.Interop.Outlook.olDefaultFolders” -as [type]
  20. $outlook = New-Object -ComObject outlook.application
  21. $namespace = $outlook.GetNameSpace(“MAPI”)
  22. $folder = $namespace.getDefaultFolder($olFolders::olFolderInBox)
  23.  
  24. $date = Get-Date
  25. $timespan = $date.AddMinutes(-180).ToString("M/d/yyy h:mm:s tt")
  26. $emails = $folder.items | where {$_.ReceivedTime -gt $timespan}
  27.  
  28. $requests = @()
  29.  
  30. foreach($email in $emails)
  31.     {
  32.         $senderName = $email.SenderName
  33.         $emailHeader = $email.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x007D001E")
  34.         $sentTo = if($emailHeader -match "To: .+")
  35.                     {
  36.                         $Matches[0]
  37.                     }
  38.  
  39.         if($sentTo -match "pwreset@gardencityks\.us")
  40.             {
  41.                 if($emailHeader -notmatch "X-Barracuda")
  42.                     {
  43.                         echo "added $senderName email to requests array"
  44.                         $requests += $email
  45.                     }
  46.                 else
  47.                     {
  48.                         echo "$senderName header mismatch"
  49.                     }              
  50.             }
  51.         else
  52.             {
  53.                 echo "$senderName not sent to pwreset"
  54.             }
  55.     }
  56.  
  57. echo ""
  58. $requests = $requests | select -Property SenderName, Subject
  59.  
  60. foreach($request in $requests)
  61.     {
  62.         $username = $request.Subject
  63.         $user = Get-ADUser -Identity $username -Properties Manager -ErrorAction Ignore
  64.         $userManager = Get-ADUser -Identity $user.manager | select -ExpandProperty Name
  65.         $senderName = $request.SenderName
  66.         $senderUsername = $senderName.Replace(" ",".")
  67.         $senderEmail = "$senderUsername"+"@GardenCityKS.US"
  68.  
  69.         $retries = 3
  70.         $retryCount = 0
  71.         $completed = $false
  72.  
  73.         if($senderName -eq $userManager)
  74.             {
  75.                 while(-not $completed)
  76.                     {
  77.                         Try
  78.                             {
  79.                                 # The main command MUST be set with ErrorAction Stop. Errors must be treated as terminating
  80.                                 # or it won't be caught by the catch block for the retry
  81.  
  82.                                 $pass = Get-Password
  83.                                 $securePass = ConvertTo-SecureString -String $pass -AsPlainText -Force
  84.                                                                
  85.                                 Set-ADAccountPassword -Identity $username -Reset -NewPassword $securePass -ErrorAction Stop
  86.                                 Set-ADUser -Identity $username -ChangePasswordAtLogon -ErrorAction Stop
  87.  
  88.                                 Echo "Changed $username's password for $senderName. $date"
  89.                                 $emailParameters = @{
  90.                                                         Subject = "$username pw change success"
  91.                                                         Body = "$date
  92.                                                                Password: $pass"                                                                
  93.                                                         From = "PW Reset <PWReset@GardenCityKS.US>"
  94.                                                         To = "$senderEmail"
  95.                                                         SmtpServer = "sabre.gardencityks.us"
  96.                                                     }
  97.                                 Send-MailMessage @emailParameters -UseSsl -BodyAsHtml -ErrorAction Stop
  98.  
  99.                                 $completed = $true  
  100.                             }
  101.                         catch
  102.                             {
  103.                                 if($retryCount -ge $retries)
  104.                                     {
  105.                                         Echo "Failed to reset $username's password for $senderName the maximum of $retryCount times."
  106.                                         $emailParameters = @{
  107.                                                                 Subject = "$username pw change failed"
  108.                                                                 Body = "$date
  109.                                                                        Failed to reset $username's password for $senderName the maximum of $retryCount times.
  110.                                                                        Contact help desk for this request."                                                                
  111.                                                                 From = "PW Reset <PWReset@GardenCityKS.US>"
  112.                                                                 To = "$senderEmail"
  113.                                                                 SmtpServer = "sabre.gardencityks.us"
  114.                                                             }
  115.                                         Send-MailMessage @emailParameters -UseSsl -BodyAsHtml
  116.                                         throw
  117.                                     }
  118.                                 else
  119.                                     {
  120.                                         Echo "Failed to reset $username's password for $senderName $retryCount times. Trying again in 3 seconds."
  121.                                         Start-Sleep -Seconds 3
  122.                                         $retryCount++
  123.                                     }
  124.                             }
  125.                     }
  126.             }
  127.         else
  128.             {
  129.                 Echo "$senderName is not $username's Manager. Will not reset $username's password."
  130.                 $emailParameters = @{
  131.                                         Subject = "$username pw change failed"
  132.                                         Body = "$date
  133.                                                $senderName is not $username's Manager. Will not reset $username's password.
  134.                                                Contact help desk for this request.  "                                                                
  135.                                         From = "PW Reset <PWReset@GardenCityKS.US>"
  136.                                         To = "$senderEmail"
  137.                                         SmtpServer = "sabre.gardencityks.us"
  138.                                     }
  139.                 Send-MailMessage @emailParameters -UseSsl -BodyAsHtml
  140.             }
  141.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement