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

2 thoughts on “Set Randomly Password AD User and Send as Mail

    • Author gravatar

      Kullanıcı şifresini almadan epostasını nasıl kontrol edecek? Epostaya erişebilmesi için şifreye ihtiyacı yok mu?

      Aşağıdaki kod da random password üretir:

      Add-Type -AssemblyName ‘System.Web’
      $Password = [System.Web.Security.Membership]::GeneratePassword(10,2)

      ya da tek satır olsun istersek:

      (“!@#$%^&*0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz”.tochararray() | sort {Get-Random})[0..10] -join ”

      • Author gravatar

        Merhaba,
        Öncelikle yorumunuz ve öneriniz için teşekkürler, tabi kullanım alanını vurgulamak gerekti, bir çok kurumsal yapılarda outsource edilen veya destek alınan firma personellerine verilen ayrı kullanıcılar vardır bunlara mail adresi tanımlanmaz AD tarafındaki e-mail kısmına şirket mail adresleri girilir. Kullanım alanı bu tarz işlemlere yöneliktir, tabi ihtiyaca yönelik scriptin belli bölümleri de kullanılabilir.

        Random kısmını tek satır yapabilirdim, fakat her seferinde tek veya iki tip karakter seçme ihtimalini(düşükte olsa var) ortadan kaldırmak maksatlı bu şekilde yaptım. Aksi halde AD üzerindeki password complexity uymayıp hata dönecektir.

        Teşekkürler.

Bir cevap yazın

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