Set Randomly Password AD User and Send as Mail

Merhaba, yine başka bir küçük ama etkili yazdığım bir script’i sizler ile paylaşmak istedim 🙂

Script şu işlemi yapar; X bir Active Directory kullanıcısının şifresini resetler ve ilgili şifreyi X kullanıcısına mail olarak gönderir. Bu sayede sistem admini olarak X kullanıcısının şifresini görmemiş ve gerekli complexity’e sahip şifre üretmiş olursunuz.

  • Note: Script, kullanıcnın mail adresini manuel girmenizi isteyecektir fakat ADUser E-Mail attiribute kısmı doğru bir şekilde var ise “Enter” basarak ilerleyebilirsiniz. İlgili mail adresine şifre gönderilecektir.
Begin {  
   Clear-Host  
   #Check for Active Directory module  
   if (-not (Import-Module activedirectory)) {  
     Import-Module activedirectory  
   }  
   
   #Generate Random Password  
   function Generate-Password {  
     $alphabet1= "abcdefghijklmnopqstuvwxyz"
     $alphabet2 = "1234567890"
     $alphabet3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     $alphabet4 = "!@#$&*_-+"  
     $char1 = for ($i = 0; $i -lt $alphabet1.length; $i++) { $alphabet1[$i] }  
     $char2 = for ($i = 0; $i -lt $alphabet2.length; $i++) { $alphabet2[$i] }
     $char3 = for ($i = 0; $i -lt $alphabet3.length; $i++) { $alphabet3[$i] }
     $char4 = for ($i = 0; $i -lt $alphabet4.length; $i++) { $alphabet4[$i] }
   
     for ($i = 0; $i -le 12; $i++)  
     {  
       if ($i -lt 3){$CharArray += Write-Output $(get-random $char1)}
       if ($i -gt 2 -and $i -lt 6){$CharArray += Write-Output $(get-random $char2)}
       if ($i -gt 4 -and $i -lt 9){$CharArray += Write-Output $(get-random $char3)}
       if ($i -gt 8 -and $i -lt 13){$CharArray += Write-Output $(get-random $char4)}   
       if ($i -eq 12) {} #write-output `n  
     }  
     $CharArray  
   }  
     
   #Get AD user account and validate it  
   do {   
     $SamAccountName = Read-Host "`nReset Password For AD Account"  
   
     if ($SamAccountName -eq $null) {  
       Clear-Host  
       Write-Host -Object "`nPlease type AccountName`n" -BackgroundColor Red  
       continue  
     }  
     elseif ($(Get-ADUser -LDAPFilter "(sAMAccountName=$SamAccountName)").SamAccountName -eq $SamAccountName) {  
       $AccountToReset = Get-ADUser -LDAPFilter "(sAMAccountName=$SamAccountName)"  
         
       break  
     }  
     else {  
       Clear-Host  
       Write-Host -Object "`nTyped Account Name doesn't exists, Please try again`n" -BackgroundColor Red  
       $Everything_is_fine = $false   
     }  
   }  
   while ($SamAccountName -eq $null -or $Everything_is_fine -eq $false)  
     
   Write-Host "`nAccount has been verified and it exists`n" -ForegroundColor Green  
     
   $To = Read-Host "`nTL or Manager you want to send password to[Manager@example.com]"
   if($To -eq $null){$To = $(Get-ADUser -LDAPFilter "(sAMAccountName=$SamAccountName)" -Properties *).mail}    
   #One Time Information fillup  
   $From = "resetpass@get-itlabs.com"  
   $Subject = "Password reset request for user $SamAccountName"  
   $SmtpServer = "webmail.get-itlabs.com"  
   $port = 25  
 }  
   
 Process {  
   #Reset password and unlock it  
   $PlainText = Generate-Password  
   $Password = ConvertTo-SecureString -AsPlainText $PlainText -Force  
   $AccountToReset | Set-ADAccountPassword -Reset -NewPassword $Password  
   $AccountToReset | Unlock-ADAccount  
   Write-Warning "Password reseted and unlocked"  
   
   #Send Email  
   $Body = "$SamAccountName your new password is $PlainText"  
   Send-MailMessage -To $To -From $From -Subject $Subject -Body $Body -SmtpServer $SmtpServer -Port 25  
   Write-Host "Information emailed to Manager or TL" -ForegroundColor Cyan  
 }  
   
 End {  
   #Write-Host "New password is $PlainText"  
   Pause  
 }  

Teşekkürler,

Erdem AYYILDIZ

About the Author

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir