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.
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
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 ”
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.