Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $ascii=$NULL;For ($a=48;$a –le 122;$a++) {$ascii+=,[char][byte]$a}
- function Get-Password
- {
- Param
- (
- $Length=10,
- $SourceData=$ascii
- )
- For($loop=1; $loop -le $length; $loop++)
- {
- $Password+=($SourceData | Get-Random)
- }
- return $Password
- }
- Add-type -AssemblyName “Microsoft.Office.Interop.Outlook” | Out-Null
- $olFolders = “Microsoft.Office.Interop.Outlook.olDefaultFolders” -as [type]
- $outlook = New-Object -ComObject outlook.application
- $namespace = $outlook.GetNameSpace(“MAPI”)
- $folder = $namespace.getDefaultFolder($olFolders::olFolderInBox)
- $date = Get-Date
- $timespan = $date.AddMinutes(-180).ToString("M/d/yyy h:mm:s tt")
- $emails = $folder.items | where {$_.ReceivedTime -gt $timespan}
- $requests = @()
- foreach($email in $emails)
- {
- $senderName = $email.SenderName
- $emailHeader = $email.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x007D001E")
- $sentTo = if($emailHeader -match "To: .+")
- {
- $Matches[0]
- }
- if($sentTo -match "pwreset@gardencityks\.us")
- {
- if($emailHeader -notmatch "X-Barracuda")
- {
- echo "added $senderName email to requests array"
- $requests += $email
- }
- else
- {
- echo "$senderName header mismatch"
- }
- }
- else
- {
- echo "$senderName not sent to pwreset"
- }
- }
- echo ""
- $requests = $requests | select -Property SenderName, Subject
- foreach($request in $requests)
- {
- $username = $request.Subject
- $user = Get-ADUser -Identity $username -Properties Manager -ErrorAction Ignore
- $userManager = Get-ADUser -Identity $user.manager | select -ExpandProperty Name
- $senderName = $request.SenderName
- $senderUsername = $senderName.Replace(" ",".")
- $senderEmail = "$senderUsername"+"@GardenCityKS.US"
- $retries = 3
- $retryCount = 0
- $completed = $false
- if($senderName -eq $userManager)
- {
- while(-not $completed)
- {
- Try
- {
- # The main command MUST be set with ErrorAction Stop. Errors must be treated as terminating
- # or it won't be caught by the catch block for the retry
- $pass = Get-Password
- $securePass = ConvertTo-SecureString -String $pass -AsPlainText -Force
- Set-ADAccountPassword -Identity $username -Reset -NewPassword $securePass -ErrorAction Stop
- Set-ADUser -Identity $username -ChangePasswordAtLogon -ErrorAction Stop
- Echo "Changed $username's password for $senderName. $date"
- $emailParameters = @{
- Subject = "$username pw change success"
- Body = "$date
- Password: $pass"
- From = "PW Reset <PWReset@GardenCityKS.US>"
- To = "$senderEmail"
- SmtpServer = "sabre.gardencityks.us"
- }
- Send-MailMessage @emailParameters -UseSsl -BodyAsHtml -ErrorAction Stop
- $completed = $true
- }
- catch
- {
- if($retryCount -ge $retries)
- {
- Echo "Failed to reset $username's password for $senderName the maximum of $retryCount times."
- $emailParameters = @{
- Subject = "$username pw change failed"
- Body = "$date
- Failed to reset $username's password for $senderName the maximum of $retryCount times.
- Contact help desk for this request."
- From = "PW Reset <PWReset@GardenCityKS.US>"
- To = "$senderEmail"
- SmtpServer = "sabre.gardencityks.us"
- }
- Send-MailMessage @emailParameters -UseSsl -BodyAsHtml
- throw
- }
- else
- {
- Echo "Failed to reset $username's password for $senderName $retryCount times. Trying again in 3 seconds."
- Start-Sleep -Seconds 3
- $retryCount++
- }
- }
- }
- }
- else
- {
- Echo "$senderName is not $username's Manager. Will not reset $username's password."
- $emailParameters = @{
- Subject = "$username pw change failed"
- Body = "$date
- $senderName is not $username's Manager. Will not reset $username's password.
- Contact help desk for this request. "
- From = "PW Reset <PWReset@GardenCityKS.US>"
- To = "$senderEmail"
- SmtpServer = "sabre.gardencityks.us"
- }
- Send-MailMessage @emailParameters -UseSsl -BodyAsHtml
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement