Unicorn: Sosyal Mühendisliğin "Sihirli" Aracı ve Nasıl Korunursunuz?
Unicorn: Sosyal Mühendisliğin "Sihirli" Aracı ve Nasıl Korunursunuz?...
Active Directory ortamında çok sayıda kullanıcıyı hızlı ve verimli bir şekilde oluşturmak için PowerShell scriptleri kullanabilirsiniz. Bu yazıda, CSV dosyasından toplu kullanıcı oluşturma işlemini adım adım ele alacağız.
Örnek CSV dosyası
Kullanmadan önce mutlaka değiştirmeniz gerekenler:
sirket.local yerine kendi domain adınızı yazınOU=Kullanicilar,DC=sirket,DC=local yerine kendi OU yapınızı yazınNotepad veya Excel ile açın
Dosya → Farklı Kaydet seçeneğine tıklayın
Dosya adı: kullanicilar.csv
Dosya türü: CSV (virgülle ayrılmış) seçin
Kodlama: UTF-8 olarak kaydedin
Ad,Soyad,Domain,OU,Sifre,Departman,Unvan,Aciklama,Grup,Yonetici,Telefon
Ahmet,Yılmaz,sirket.com,"OU=Muhasebe,OU=A-Office,DC=sirket,DC=local",Ahmet2024!,Muhasebe,Bakım Teknisyeni,Bakım Departmanı Teknisyeni,Muhasebe_Ekibi,Mehmet Yılmaz,+90 242 330 1001
Ayşe,Demir,sirket.com,"OU=Muhasebe,OU=A-Office,DC=sirket,DC=local",Ayse2024!,Muhasebe,Mekanik Mühendis,Uçak Bakım Mühendisi,Muhasebe_Ekibi,Mehmet Yılmaz,+90 242 330 1002
Mehmet,Kaya,sirket.com,"OU=Muhasebe,OU=A-Office,DC=sirket,DC=local",Mehmet2024!,Muhasebe,Aviyonik Teknisyeni,Aviyonik Sistemler Uzmanı,Muhasebe_Ekibi,Mehmet Yılmaz,+90 242 330 1003
Fatma,Şahin,sirket.com,"OU=Muhasebe,OU=A-Office,DC=sirket,DC=local",Fatma2024!,Muhasebe,Kalite Kontrol Uzmanı,Bakım Kalite Kontrolü,Muhasebe_Ekibi,Mehmet Yılmaz,+90 242 330 1004
Ali,Çelik,sirket.com,"OU=Muhasebe,OU=A-Office,DC=sirket,DC=local",Ali2024!,Muhasebe,Motor Teknisyeni,Motor Bakım Uzmanı,Muhasebe_Ekibi,Mehmet Yılmaz,+90 242 330 1005
Zeynep,Arslan,sirket.com,"OU=Muhasebe,OU=A-Office,DC=sirket,DC=local",Zeynep2024!,Muhasebe,Bakım Müdürü,Bakım Departman Müdürü,Muhasebe_Yonetim,Mehmet Yılmaz,+90 242 330 1006
Mustafa,Aydın,sirket.com,"OU=Muhasebe,OU=A-Office,DC=sirket,DC=local",Mustafa2024!,Muhasebe,Yapısal Tamirci,Uçak Gövde Tamiri,Muhasebe_Ekibi,Mehmet Yılmaz,+90 242 330 1007
Elif,Özkan,sirket.com,"OU=Muhasebe,OU=A-Office,DC=sirket,DC=local",Elif2024!,Muhasebe,NDT Teknisyeni,Tahribatsız Muayene Uzmanı,Muhasebe_Ekibi,Mehmet Yılmaz,+90 242 330 1008
Hakan,Kurt,sirket.com,"OU=Muhasebe,OU=A-Office,DC=sirket,DC=local",Hakan2024!,Muhasebe,Elektrik Teknisyeni,Elektrik Sistemleri Uzmanı,Muhasebe_Ekibi,Mehmet Yılmaz,+90 242 330 1009
Selin,Yıldız,sirket.com,"OU=Muhasebe,OU=A-Office,DC=sirket,DC=local",Selin2024!,Muhasebe,Planlama Uzmanı,Bakım Planlama ve Dokümantasyon,Muhasebe_Yonetim,Mehmet Yılmaz,+90 242 330 1010
Can,Özdemir,sirket.com,"OU=Muhasebe,OU=A-Office,DC=sirket,DC=local",,Muhasebe,Hidrolik Teknisyeni,Hidrolik Sistemler Uzmanı,Muhasebe_Ekibi,Mehmet Yılmaz,+90 242 330 1011
Deniz,Yalçın,sirket.com,"OU=Muhasebe,OU=A-Office,DC=sirket,DC=local",,Muhasebe,Kompozit Tamirci,Kompozit Malzeme Uzmanı,Muhasebe_Ekibi,Mehmet Yılmaz,+90 242 330 1012Import-Module ActiveDirectory
# CSV dosya yolu - kendi dosya yolunuzu girin
$csvPath = "C:\Users\kullanicilar.csv"
$users = Import-Csv -Path $csvPath -Encoding UTF8
# İsim düzeltme fonksiyonu (ilk harf büyük, diğerleri küçük)
function Format-ProperCase {
    param([string]$text)
    if ([string]::IsNullOrEmpty($text)) { return $text }
    
    # İlk harfi büyük, diğerlerini küçük yap
    return $text.Substring(0,1).ToUpper() + $text.Substring(1).ToLower()
}
foreach ($user in $users) {
    
    # Ad ve Soyadı düzelt (ilk harf büyük, diğerleri küçük)
    $firstName = Format-ProperCase -text $user.Ad
    $lastName = $user.Soyad.ToUpper()  # Soyad tamamen büyük harf
    
    # Ad ve Soyadı düzelt (ilk harf büyük, diğerleri küçük)
    $firstName = Format-ProperCase -text $user.Ad
    $lastName = Format-ProperCase -text $user.Soyad
    
    # Kullanıcı adını otomatik oluştur (ismin ilk harfi + soyad)
    $username = ($firstName.Substring(0,1) + $lastName).ToLower()
    # Türkçe karakterleri düzelt
    $username = $username -replace 'ç','c' -replace 'ğ','g' -replace 'ı','i' -replace 'ö','o' -replace 'ş','s' -replace 'ü','u'
    
    # E-posta adresini otomatik oluştur (ismin ilk harfi + soyad)
    $emailAddress = "$username@sirket.local"
    
    # Yönetici bilgisini al (eğer varsa)
    $managerDN = $null
    if ($user.Yonetici) {
        try {
            $manager = Get-ADUser -Filter "Name -eq '$($user.Yonetici)'" -ErrorAction SilentlyContinue
            if ($manager) {
                $managerDN = $manager.DistinguishedName
            }
        } catch {
            Write-Host "Yönetici bulunamadı: $($user.Yonetici)" -ForegroundColor Yellow
        }
    }
    
    # Şifre belirtilmemişse varsayılan şifre kullan
    $password = if ($user.Sifre) { $user.Sifre } else { "SiFr3123!1" }
    
    # Kullanıcı parametreleri
    $params = @{
        Name                  = "$firstName $lastName"
        GivenName            = $firstName
        Surname              = $lastName
        SamAccountName       = $username
        UserPrincipalName    = "$username@$($user.Domain)"
        EmailAddress         = $emailAddress
        Path                 = $user.OU
        AccountPassword      = (ConvertTo-SecureString $password -AsPlainText -Force)
        Enabled              = $true
        ChangePasswordAtLogon = $true
        Department           = $user.Departman
        Title                = $user.Unvan
        Description          = $user.Aciklama
        MobilePhone          = $user.Telefon
    }
    
    # Yönetici varsa ekle
    if ($managerDN) {
        $params.Add('Manager', $managerDN)
    }
    
    try {
       
        New-ADUser @params
        Write-Host "Kullanıcı oluşturuldu: $username ($emailAddress)" -ForegroundColor Green
        
        # Eğer grup bilgisi varsa gruba ekle
        if ($user.Grup) {
            Add-ADGroupMember -Identity $user.Grup -Members $username
            Write-Host "  → Gruba eklendi: $($user.Grup)" -ForegroundColor Cyan
        }
    }
    catch {
        Write-Host "Hata: $username - $($_.Exception.Message)" -ForegroundColor Red
    }
}
Write-Host "`nİşlem tamamlandı!" -ForegroundColor Yellowİsim + Soyad kombinasyonu
Türkçe karakter dönüşümü
Küçük harf formatı
Ad ve soyad için ilk harf büyük, diğerleri küçük
Türkçe karakter desteği
CSV'de şifre belirtilmemişse varsayılan şifre kullanımı
İlk girişte şifre değiştirme zorunluluğu
Otomatik grup üyeliği
Yönetici atama desteği
# Script içindeki domain bilgisini kontrol edin $emailAddress = "$username@sirket.local"
sirket.local yerine kendi domain adınızı yazın.
# Örnek OU yapısı "OU=Muhasebe,OU=A-Office,DC=sirket,DC=local"
Kendi OU yapınıza göre düzenleyin.
Şifre politikasına uygun güçlü şifreler kullanın
Varsayılan şifreyi değiştirin
Test ortamında deneyin
Grup adlarının AD'nizde mevcut olduğundan emin olun
Grup yoksa önceden oluşturun
PowerShell'i yönetici olarak çalıştırın
Execution Policy ayarlayın:
Set-ExecutionPolicy RemoteSigned
Script dosya yolunu güncelleyin
CSV dosyasını kontrol edin
Scripti çalıştırın
PowerShell modülünü kontrol edin: Get-Module ActiveDirectory
CSV kodlamasını kontrol edin: UTF-8 kullanın
OU yolunu doğrulayın: Get-ADOrganizationalUnit
Grupları kontrol edin: Get-ADGroup
Bu script ile:
✅ Toplu kullanıcı oluşturma
✅ Otomatik grup atama
✅ Yönetici ilişkisi kurma
✅ Profesyonel e-posta adresi oluşturma
✅ Türkçe karakter desteği
✅ Hata yönetimi
işlemlerini tek seferde gerçekleştirebilirsiniz.
Önemli: Production ortamında kullanmadan önce mutlaka test ortamında deneyin ve güvenlik ayarlarını gözden geçirin.