PowerShell

PowerShell ile Active Directory Kullanıcılarını CSV’ye Aktarma

Neden CSV’ye Aktarma?

Powershell ile Active Directory kullanıcı verilerini CSV’ye almak; envanter, raporlama, lisanslama ve denetim (audit) süreçlerinde standart, taşınabilir bir çıktı sağlar.

Ön Koşullar

  • Windows’ta RSAT kurulu olmalı ve Active Directory modülü mevcut olmalı.

  • AD üzerinde okuma yetkisi (en azından ilgili OU için).

  • PowerShell 5.1+ (veya PowerShell 7 + uygun modül).

  • Gerekirse çalıştırma politikası:

    Set-ExecutionPolicy RemoteSigned

Adım Adım Anlatım

1) AD Modülünü Yükleyin

Import-Module ActiveDirectory

2) Çıktı Yolunu Belirleyin

$OutputCsv = "C:\Exports\AD_Users_$(Get-Date -Format yyyyMMdd).csv"

3) (Opsiyonel) OU Bazında Filtreleyin

Belirli bir OU’dan çekmek istiyorsanız DN (Distinguished Name) kullanın:

$SearchBase = "OU=Istanbul,OU=Users,DC=contoso,DC=com" # örnek

4) İstediğiniz Alanları Seçin

Raporunuza girecek sütunları planlayın (örn. UPN, DisplayName, Department, Title, Enabled, LastLogonDate, WhenCreated, Mail, Phone).

5) Script’i Çalıştırın ve CSV’yi Kontrol Edin

Script tamamlandığında $OutputCsv yolunda dosya oluşur. Excel ile açabilirsiniz.

Örnek PowerShell ile Active Directory Script’i

<#
.SYNOPSIS
AD kullanıcılarını seçili alanlarla CSV'ye aktarır.
.DESCRIPTION
OU filtreleme, özel alan seçimi, hata yönetimi ve basit loglama içerir.
.PARAMETER SearchBase
(Opsiyonel) Belirli bir OU DN'i. Boşsa tüm etki alanında arar.
.PARAMETER OutputCsv
Çıktı dosyasının yolu.
.EXAMPLE
.\Export-ADUsers.ps1 -SearchBase "OU=Istanbul,OU=Users,DC=contoso,DC=com" -OutputCsv "C:\Exports\users.csv"
#>

[CmdletBinding()]
param(
[string]$SearchBase,
[Parameter(Mandatory=$false)]
[string]$OutputCsv = "C:\Exports\AD_Users_{0}.csv" -f (Get-Date -Format 'yyyyMMdd_HHmm')
)

try {
# Modül kontrolü
if (-not (Get-Module -ListAvailable -Name ActiveDirectory)) {
throw "ActiveDirectory modülü bulunamadı. RSAT kurulumunu doğrulayın."
}
Import-Module ActiveDirectory -ErrorAction Stop

# Sorgu alanları
$props = @(
'SamAccountName','UserPrincipalName','DisplayName','GivenName','Surname',
'Enabled','Department','Title','telephoneNumber','mail','whenCreated','lastLogonDate'
)

# Filtre ve arama kapsamı
$commonParams = @{
Filter = '*'
Properties = $props
}
if ($SearchBase) { $commonParams.SearchBase = $SearchBase }

Write-Host "Kullanıcılar çekiliyor..."
$users = Get-ADUser @commonParams | Sort-Object -Property DisplayName

# Dışa aktarılacak sütunları seç
$export = $users | Select-Object @{
Name='UserName'; Expression={$_.SamAccountName}
}, @{
Name='UPN'; Expression={$_.UserPrincipalName}
}, @{
Name='DisplayName'; Expression={$_.DisplayName}
}, @{
Name='FirstName'; Expression={$_.GivenName}
}, @{
Name='LastName'; Expression={$_.Surname}
}, @{
Name='Department'; Expression={$_.Department}
}, @{
Name='Title'; Expression={$_.Title}
}, @{
Name='Phone'; Expression={$_.telephoneNumber}
}, @{
Name='Email'; Expression={$_.mail}
}, @{
Name='Enabled'; Expression={$_.Enabled}
}, @{
Name='Created'; Expression={$_.whenCreated}
}, @{
Name='LastLogonDate'; Expression={$_.lastLogonDate}
}




# Klasör yoksa oluştur
$dir = Split-Path -Path $OutputCsv -Parent
if (-not (Test-Path $dir)) { New-Item -Path $dir -ItemType Directory -Force | Out-Null }

# CSV'ye yaz
$export | Export-Csv -Path $OutputCsv -NoTypeInformation -Encoding UTF8

Write-Host "Toplam kullanıcı: $($users.Count)"
Write-Host "CSV oluşturuldu: $OutputCsv"
}
catch {
Write-Warning ("Hata: " + $_.Exception.Message)
throw
}

Alternatif: LDAP Filtresi ile Hassas Arama

Örneğin sadece etkin kullanıcılar:

Get-ADUser -LDAPFilter "(&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" -Properties mail

Örnek CSV Çıktısı

UserName,UPN,DisplayName,FirstName,LastName,Department,Title,Phone,Email,Enabled,Created,LastLogonDate
jdoe,jdoe@contoso.com,John Doe,John,Doe,IT,System Administrator,+90 212 000 00 00,jdoe@contoso.com,True,2021-05-12,2025-10-20
asmith,asmith@contoso.com,Ayşe Smith,Ayşe,Smith,Finance,Accountant,+90 212 111 11 11,asmith@contoso.com,True,2023-02-03,2025-10-22

Not: Tarih formatları bölgesel ayarlara göre değişebilir. Excel içe aktarımında “Veri → Metinden/CSV” ile sütun türlerini belirlemen önerilir.

Tolga CEYHAN

Tolga CEYHAN, bilgi teknolojilerini severek takip eder ve BT üzerine hali hazırda aktif olarak çalışmaktadır. 2006 yılından 2017 yılına kadar web tasarım yazılım üzerine çalışmalar yaptım. Şuan ise Windows Sistem ve Sistem Güvenliği alanında çalışmalarımı sürdürmekteyim.

Recent Posts

PowerShell Komutları (Profesyonel Rehber)

Birçok kişi PowerShell komutları konusuna yalnızca “hangi komut ne işe yarar?” düzeyinde yaklaşır. Oysa profesyonel…

1 ay ago

Windows File Server Migration Rehberi (Adım Adım Veri Taşıma)

Kurumsal IT altyapılarında zamanla depolama ihtiyaçlarının artması, eski sunucuların performansının yetersiz kalması veya yeni mimariye…

1 ay ago

NTFS Permission Tasarımı ve AGDLP Modeli Rehberi

NTFS Permission Tasarımı: AGDLP Modeli ile Kurumsal Yetkilendirme Rehberi Kurumsal ortamlarda NTFS permission tasarımı, dosya…

2 ay ago

Windows File Server Güvenliği Rehberi

Kurumsal yapılarda Windows File Server güvenliği, veri bütünlüğü ve iş sürekliliği açısından kritik öneme sahiptir.…

2 ay ago

Blockchain Mantığı ile PowerShell Log Bütünlüğü

Blockchain Log Bütünlüğü Bu yazımızda blockchain log bütünlüğü üzerine incelemelerde bulunacağız. Günümüz kurumsal sistemlerinde en…

2 ay ago

PowerShell SQL Backup Script – Automated Full Database Backup

A PowerShell SQL Server backup script is a practical way to standardize SQL backups across…

3 ay ago

This website uses cookies.

Read More