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