# Toplu Kullanıcı ve Bilgisayar Provizyonu: CSV Verilerini PowerShell ile AD Nesnelerine Dönüştürme

- Bağlantı: https://musti.org/powershell/toplu-kullanici-provizyonu-csv-ad/
- Yayımlanma: 2026-09-21T21:38:27+03:00
- Yazar: mmutlu

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 = "$samAccountName@sirket.com"
        $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.
