# önder online
Teknoloji ve siber güvenlik dünyasına hoş geldiniz Güncel siber tehditler ve korunma yöntemleri Yapay zekâ ve otomasyonun güvenliğe etkileri Microsoft 365 ve Active Directory güvenlik rehberleri Yazılım geliştirmede güvenlik odaklı yaklaşımlar Teknoloji ve siber güvenlik dünyasına hoş geldiniz Güncel siber tehditler ve korunma yöntemleri

Menu

PowerShell kullanarak Active Directory gruplarına CSV dosyasından kullanıcı import işlemi

PowerShell kullanarak Active Directory gruplarına CSV dosyasından kullanıcı import işlemi

PowerShell kullanarak Active Directory gruplarına CSV dosyasından kullanıcı import işlemini kolayca yapabilirsiniz.

Tabii 👍 Senin verdiğin scripti ve açıklamaları derli toplu bir blog yazısı haline getirdim. Hem giriş hem de adım adım anlatım olacak şekilde düzenledim:


PowerShell ile CSV Dosyasından Active Directory Gruplarına Kullanıcı Ekleme

Active Directory ortamında çok sayıda kullanıcıyı farklı gruplara eklemek manuel olarak oldukça zaman alıcı olabilir. Özellikle yüzlerce kullanıcıyı birden gruplara dahil etmeniz gerektiğinde, PowerShell kullanarak bu işlemi otomatikleştirmek hem zaman kazandırır hem de hata payını en aza indirir.

Bu yazıda, CSV dosyasından kullanıcıları Active Directory gruplarına ekleyen bir PowerShell scriptini inceleyeceğiz.


1. CSV Dosyasının Hazırlanması

İlk olarak bir CSV dosyası oluşturmanız gerekiyor. Dosya iki sütundan oluşmalı:

  • SamAccountName → AD kullanıcı adı

  • GroupName → Eklenecek grup adı

Örnek CSV içeriği şu şekilde olabilir:

SamAccountName,GroupName
john.doe,IT_Department
jane.smith,HR_Department
mike.wilson,Finance_Group
sarah.jones,Marketing_Team
robert.brown,Sales_Department

📌 CSV dosyanızı örneğin C:\bulk_group\test_bulk.csv yoluna kaydedebilirsiniz.


2. PowerShell Scripti

Aşağıdaki script CSV dosyasını okur, her kullanıcıyı ilgili gruba eklemeye çalışır ve işlemlerin sonucunu renkli mesajlarla raporlar:

# ============================
# AD Kullanıcılarını Gruplara CSV'den Import Etme Scripti
# ============================

# CSV dosya yolu
$CSVPath = "C:\bulk_group\test_bulk.csv"

# CSV'yi import et
$Users = Import-Csv -Path $CSVPath

foreach ($User in $Users) {
    # Boş değer kontrolü
    if ([string]::IsNullOrEmpty($User.SamAccountName) -or [string]::IsNullOrEmpty($User.GroupName)) {
        Write-Host "Hata: Boş kullanıcı adı veya grup adı tespit edildi." -ForegroundColor Red
        continue
    }

    try {
        # Kullanıcı var mı?
        $ADUser = Get-ADUser -Identity $User.SamAccountName -ErrorAction Stop

        # Grup var mı?
        $ADGroup = Get-ADGroup -Identity $User.GroupName -ErrorAction Stop

        # Kullanıcı grupta mı?
        $IsMember = Get-ADGroupMember -Identity $ADGroup | Where-Object { $_.SamAccountName -eq $User.SamAccountName }

        if (-not $IsMember) {
            # Kullanıcıyı gruba ekle
            Add-ADGroupMember -Identity $ADGroup -Members $ADUser -ErrorAction Stop
            Write-Host "Başarılı: $($User.SamAccountName) kullanıcısı $($User.GroupName) grubuna eklendi." -ForegroundColor Green
        }
        else {
            Write-Host "Bilgi: $($User.SamAccountName) kullanıcısı zaten $($User.GroupName) grubunda mevcut." -ForegroundColor Yellow
        }
    }
    catch {
        Write-Host "Hata: $($User.SamAccountName) için işlem başarısız -> $($_.Exception.Message)" -ForegroundColor Red
    }
}

3. Scriptin Özellikleri

Hata kontrolü yapar → Boş kullanıcı/grup satırlarını atlar
Kullanıcıyı doğrular → AD’de gerçekten var mı kontrol eder
Grubu doğrular → Belirtilen grup mevcut mu bakar
Üyelik kontrolü yapar → Kullanıcı zaten grupta mı kontrol eder
Renkli raporlama

  • Yeşil → Başarılı ekleme

  • Sarı → Zaten grupta

  • Kırmızı → Hata


4. Scripti Çalıştırmadan Önce

  • PowerShell’i yönetici olarak çalıştırın

  • Import-Module ActiveDirectory komutu ile AD modülünü yükleyin

  • CSV dosyanızın doğru formatta olduğundan emin olun

Harika 👍 O zaman blog yazısına ek bir bölüm olarak loglama kısmını da dahil edelim. Böylece işlemleri yalnızca ekranda değil, dosyalarda da saklayabileceksin.

Aşağıda güncellenmiş script var 👇


5. İşlemleri Log Dosyalarına Kaydetme

Raporları yalnızca ekranda görmek yeterli olmayabilir. Başarılı ve başarısız işlemleri daha sonra incelemek için ayrı log dosyalarına yazdırmak çok faydalıdır.

Aşağıdaki script, C:\bulk_group\logs\ klasörüne iki dosya oluşturur:

  • success.log → başarılı eklemeler

  • error.log → hatalar

# ============================
# AD Kullanıcılarını Gruplara CSV'den Import Etme + Loglama
# ============================

# CSV dosya yolu
$CSVPath = "C:\bulk_group\test_bulk.csv"

# Log dosya yolları
$LogPath = "C:\bulk_group\logs"
$SuccessLog = Join-Path $LogPath "success.log"
$ErrorLog   = Join-Path $LogPath "error.log"

# Log klasörü yoksa oluştur
if (-not (Test-Path $LogPath)) {
    New-Item -ItemType Directory -Path $LogPath | Out-Null
}

# CSV'yi import et
$Users = Import-Csv -Path $CSVPath

foreach ($User in $Users) {
    if ([string]::IsNullOrEmpty($User.SamAccountName) -or [string]::IsNullOrEmpty($User.GroupName)) {
        $msg = "Hata: Boş kullanıcı adı veya grup adı tespit edildi."
        Write-Host $msg -ForegroundColor Red
        Add-Content -Path $ErrorLog -Value "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') | $msg"
        continue
    }

    try {
        # Kullanıcı ve grup kontrolü
        $ADUser = Get-ADUser -Identity $User.SamAccountName -ErrorAction Stop
        $ADGroup = Get-ADGroup -Identity $User.GroupName -ErrorAction Stop

        # Kullanıcı grupta mı?
        $IsMember = Get-ADGroupMember -Identity $ADGroup | Where-Object { $_.SamAccountName -eq $User.SamAccountName }

        if (-not $IsMember) {
            Add-ADGroupMember -Identity $ADGroup -Members $ADUser -ErrorAction Stop
            $msg = "Başarılı: $($User.SamAccountName) kullanıcısı $($User.GroupName) grubuna eklendi."
            Write-Host $msg -ForegroundColor Green
            Add-Content -Path $SuccessLog -Value "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') | $msg"
        }
        else {
            $msg = "Bilgi: $($User.SamAccountName) kullanıcısı zaten $($User.GroupName) grubunda mevcut."
            Write-Host $msg -ForegroundColor Yellow
            # İsteğe bağlı: bilgi mesajlarını loglamak için aşağıdaki satırı açabilirsiniz
            # Add-Content -Path $SuccessLog -Value "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') | $msg"
        }
    }
    catch {
        $msg = "Hata: $($User.SamAccountName) için işlem başarısız -> $($_.Exception.Message)"
        Write-Host $msg -ForegroundColor Red
        Add-Content -Path $ErrorLog -Value "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') | $msg"
    }
}

Log Dosyalarının Örnek Çıktısı

📂 success.log

2025-10-03 10:45:12 | Başarılı: john.doe kullanıcısı IT_Department grubuna eklendi.
2025-10-03 10:45:15 | Başarılı: jane.smith kullanıcısı HR_Department grubuna eklendi.

📂 error.log

2025-10-03 10:46:02 | Hata: mike.wilson için işlem başarısız -> Cannot find an object with identity: 'mike.wilson'
2025-10-03 10:46:10 | Hata: Boş kullanıcı adı veya grup adı tespit edildi.

Süper 👍 O zaman blog yazısını genişletip CSV’den kullanıcıları gruptan çıkarma kısmını da ekleyelim. Bu sayede tek CSV dosyasıyla hem kullanıcı ekleme hem de çıkarma işlemlerini yönetebilirsin.


6. CSV’den Kullanıcıları Gruptan Çıkarma

Bazen ihtiyaç, kullanıcıları gruplara eklemek yerine gruplardan çıkarmak olabilir. Bunun için Remove-ADGroupMember cmdlet’i kullanılır. Mantık neredeyse aynı, sadece ekleme yerine çıkarma yapılır.

Örnek Script:

# ============================
# AD Kullanıcılarını Gruplardan CSV ile Çıkarma
# ============================

# CSV dosya yolu
$CSVPath = "C:\bulk_group\remove_users.csv"

# Log dosya yolları
$LogPath = "C:\bulk_group\logs"
$SuccessLog = Join-Path $LogPath "removed_success.log"
$ErrorLog   = Join-Path $LogPath "removed_error.log"

# Log klasörü yoksa oluştur
if (-not (Test-Path $LogPath)) {
    New-Item -ItemType Directory -Path $LogPath | Out-Null
}

# CSV'yi import et
$Users = Import-Csv -Path $CSVPath

foreach ($User in $Users) {
    if ([string]::IsNullOrEmpty($User.SamAccountName) -or [string]::IsNullOrEmpty($User.GroupName)) {
        $msg = "Hata: Boş kullanıcı adı veya grup adı tespit edildi."
        Write-Host $msg -ForegroundColor Red
        Add-Content -Path $ErrorLog -Value "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') | $msg"
        continue
    }

    try {
        # Kullanıcı ve grup kontrolü
        $ADUser = Get-ADUser -Identity $User.SamAccountName -ErrorAction Stop
        $ADGroup = Get-ADGroup -Identity $User.GroupName -ErrorAction Stop

        # Kullanıcı gerçekten grupta mı?
        $IsMember = Get-ADGroupMember -Identity $ADGroup | Where-Object { $_.SamAccountName -eq $User.SamAccountName }

        if ($IsMember) {
            # Kullanıcıyı gruptan çıkar
            Remove-ADGroupMember -Identity $ADGroup -Members $ADUser -Confirm:$false -ErrorAction Stop
            $msg = "Başarılı: $($User.SamAccountName) kullanıcısı $($User.GroupName) grubundan çıkarıldı."
            Write-Host $msg -ForegroundColor Green
            Add-Content -Path $SuccessLog -Value "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') | $msg"
        }
        else {
            $msg = "Bilgi: $($User.SamAccountName) kullanıcısı $($User.GroupName) grubunda bulunmuyor."
            Write-Host $msg -ForegroundColor Yellow
        }
    }
    catch {
        $msg = "Hata: $($User.SamAccountName) için çıkarma işlemi başarısız -> $($_.Exception.Message)"
        Write-Host $msg -ForegroundColor Red
        Add-Content -Path $ErrorLog -Value "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') | $msg"
    }
}

CSV Örneği

Kullanıcıları gruptan çıkarmak için CSV dosyanız şu formatta olmalı:

SamAccountName,GroupName
john.doe,IT_Department
jane.smith,HR_Department
mike.wilson,Finance_Group

Log Çıktısı

📂 removed_success.log

2025-10-03 12:15:05 | Başarılı: john.doe kullanıcısı IT_Department grubundan çıkarıldı.

📂 removed_error.log

2025-10-03 12:16:10 | Hata: mike.wilson için çıkarma işlemi başarısız -> Cannot find an object with identity: 'mike.wilson'

 

 

Bu yöntemle yüzlerce kullanıcıyı tek seferde gruplara ekleyebilir, AD yönetim işlerinizi çok daha hızlı ve pratik hale getirebilirsiniz. Özellikle büyük organizasyonlarda, toplu işlem yapmak için bu tarz PowerShell scriptleri büyük kolaylık sağlar.