Otuz kırk yeni personelin aynı hafta işe başladığı bir dönemi hatırlıyorum — her biri için tek tek AD hesabı açmak, departman OU’sunu seçmek, grup üyeliklerini atamak… Bu iş elle yapıldığında hem yavaş hem de hataya son derece açık. CSV tabanlı bir PowerShell script’i bu süreci dakikalara indiriyor.
CSV Dosya Yapısı
İK’dan tipik olarak şu formatta bir liste geliyor:
Ad,Soyad,Departman,Unvan,Yonetici Ahmet,Yılmaz,BT,Sistem Uzmanı,mmutlu Ayşe,Kaya,Muhasebe,Muhasebe Uzmanı,bkaya
Toplu Kullanıcı Oluşturma Scripti
Import-Module ActiveDirectory
$kullanicilar = Import-Csv "C:\IK\yeni_personel.csv"
foreach ($k in $kullanicilar) {
$samAccountName = ($k.Ad.Substring(0,1) + $k.Soyad).ToLower() -replace '[ığüşöç]', ''
$upn = "[email protected]"
$ouPath = "OU=$($k.Departman),OU=Kullanicilar,DC=sirket,DC=local"
New-ADUser `
-Name "$($k.Ad) $($k.Soyad)" `
-GivenName $k.Ad `
-Surname $k.Soyad `
-SamAccountName $samAccountName `
-UserPrincipalName $upn `
-Path $ouPath `
-Department $k.Departman `
-Title $k.Unvan `
-Manager $k.Yonetici `
-AccountPassword (ConvertTo-SecureString "GeciciSifre!2026" -AsPlainText -Force) `
-ChangePasswordAtLogon $true `
-Enabled $true
Write-Host "Oluşturuldu: $samAccountName" -ForegroundColor Green
}
Grup Üyeliklerini Otomatik Atama
Kullanıcı oluşturulduktan sonra departmana göre ilgili gruplara otomatik eklemek süreci tamamlıyor:
foreach ($k in $kullanicilar) {
$grup = "GRP-$($k.Departman)"
Add-ADGroupMember -Identity $grup -Members ($k.Ad.Substring(0,1) + $k.Soyad).ToLower()
}
Hata Toleransı Eklemek
Üretim script’lerinde bir kullanıcı için hata oluşsa bile scriptin tamamının durmaması gerekiyor; bunun için try/catch bloğu kritik önemde:
foreach ($k in $kullanicilar) {
try {
# ... kullanıcı oluşturma kodu ...
Write-Host "Başarılı: $($k.Ad) $($k.Soyad)" -ForegroundColor Green
} catch {
Write-Host "HATA: $($k.Ad) $($k.Soyad) - $($_.Exception.Message)" -ForegroundColor Red
Add-Content -Path "C:\Loglar\provizyon_hatalari.log" -Value "$($k.Ad) $($k.Soyad): $($_.Exception.Message)"
}
}
Burada gözden kaçırılmaması gereken bir ayrıntı var: SamAccountName oluştururken Türkçe karakterlerin (ı, ğ, ü, ş, ö, ç) doğrudan kullanılması sistem hatalarına yol açabiliyor. Yukarıdaki script’teki -replace ifadesi bu karakterleri temizleyerek, üretimde en sık karşılaşılan hatalardan birini daha script çalışmadan önler.
Pratikte Ne Değişir
Bu script bir kez doğru kurulduktan sonra, her yeni işe alım döneminde yapmanız gereken tek şey CSV dosyasını güncelleyip script’i çalıştırmak. Saatlerce sürecek manuel iş, birkaç dakikalık bir kontrol işlemine dönüşüyor.