# PowerShell ile Active Directory’den Kullanıcı ve Bilgisayar Verilerini Dışa Aktarma: Pratik Komutlar ve Mini Tüyolar

- Bağlantı: https://musti.org/powershell/powershell-ad-kullanici-bilgisayar-veri-cekme-ipuclari/
- Yayımlanma: 2026-09-23T18:36:58+03:00
- Yazar: mmutlu

AD’den “şu bilgileri bana bir Excel’e döker misin?” talebi, BT’de neredeyse her 
hafta karşılaşılan bir istek. Bu yazıda, kullanıcı ve bilgisayar verilerini PowerShell
ile hızlıca dışa aktarmanın pratik yollarını, en sık işime yarayan filtrelerle birlikte
derledim.

## Başlamadan Önce: Modülü Yükleme

    ```
    Import-Module ActiveDirectory
    ```

**Mini tüyo:** Modül bulunamıyorsa, RSAT (Remote Server Administration Tools) kurulu
olmayabilir. Windows 10/11’de `Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.
DS-LDS.Tools~~~~0.0.1.0` ile kurabilirsiniz.

## 1. Kullanıcı Bilgilerini Çekmek

### Temel Kullanıcı Listesi

    ```
    Get-ADUser -Filter * -Properties DisplayName, EmailAddress, Department, Title |
        Select-Object Name, DisplayName, EmailAddress, Department, Title |
        Export-Csv -Path "C:\Raporlar\tum_kullanicilar.csv" -NoTypeInformation -Encoding UTF8
    ```

**Mini tüyo:** `-Encoding UTF8` parametresini unutmayın — aksi halde Türkçe karakterler(
ı, ş, ğ, ü, ö, ç) Excel’de bozuk görünür.

### Sadece Aktif (Enabled) Kullanıcılar

    ```
    Get-ADUser -Filter {Enabled -eq $true} -Properties DisplayName, EmailAddress, LastLogonDate |
        Select-Object Name, EmailAddress, LastLogonDate |
        Export-Csv -Path "C:\Raporlar\aktif_kullanicilar.csv" -NoTypeInformation -Encoding UTF8
    ```

### Belirli Bir OU’daki (Departman) Kullanıcılar

    ```
    Get-ADUser -Filter * -SearchBase "OU=Muhasebe,OU=Kullanicilar,DC=sirket,DC=local" -Properties EmailAddress |
        Select-Object Name, EmailAddress |
        Export-Csv -Path "C:\Raporlar\muhasebe_kullanicilari.csv" -NoTypeInformation -Encoding UTF8
    ```

**Mini tüyo:** OU yolunu (DistinguishedName) bilmiyorsanız, `Get-ADOrganizationalUnit-
Filter * | Select Name, DistinguishedName` ile tüm OU’ları listeleyip kopyalayabilirsiniz.

### Belirli Bir Gruba Üye Olan Kullanıcılar

    ```
    Get-ADGroupMember -Identity "GRP-Muhasebe" |
        Get-ADUser -Properties EmailAddress, Title |
        Select-Object Name, EmailAddress, Title |
        Export-Csv -Path "C:\Raporlar\grup_uyeleri.csv" -NoTypeInformation -Encoding UTF8
    ```

### Şifresi Yakında Dolacak Kullanıcılar

    ```
    Get-ADUser -Filter {Enabled -eq $true} -Properties DisplayName, "msDS-UserPasswordExpiryTimeComputed" |
        Select-Object Name, @{N='ParolaBitis';E={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}} |
        Where-Object {$_.ParolaBitis -lt (Get-Date).AddDays(14)} |
        Export-Csv -Path "C:\Raporlar\parola_bitecekler.csv" -NoTypeInformation -Encoding UTF8
    ```

## 2. Bilgisayar (Computer) Bilgilerini Çekmek

### Temel Bilgisayar Listesi

    ```
    Get-ADComputer -Filter * -Properties OperatingSystem, OperatingSystemVersion, LastLogonDate |
        Select-Object Name, OperatingSystem, OperatingSystemVersion, LastLogonDate |
        Export-Csv -Path "C:\Raporlar\tum_bilgisayarlar.csv" -NoTypeInformation -Encoding UTF8
    ```

### Sadece Sunucular

    ```
    Get-ADComputer -Filter {OperatingSystem -like "*Server*"} -Properties OperatingSystem, IPv4Address |
        Select-Object Name, OperatingSystem, IPv4Address |
        Export-Csv -Path "C:\Raporlar\sunucular.csv" -NoTypeInformation -Encoding UTF8
    ```

### 90 Gündür “Görünmeyen” (İnaktif) Bilgisayarlar

Bu, AD hijyeni için en çok kullandığım sorgulardan biri — eski/kullanılmayan bilgisayar
hesaplarını temizlemenin ilk adımı:

    ```
    Get-ADComputer -Filter * -Properties LastLogonDate, OperatingSystem |
        Where-Object {$_.LastLogonDate -lt (Get-Date).AddDays(-90)} |
        Select-Object Name, OperatingSystem, LastLogonDate |
        Sort-Object LastLogonDate |
        Export-Csv -Path "C:\Raporlar\inaktif_bilgisayarlar.csv" -NoTypeInformation -Encoding UTF8
    ```

### Belirli Bir Windows Sürümündeki Cihazlar

Örneğin, hâlâ Windows 10 çalıştıran cihazları bulup Windows 11 geçiş planlaması 
yapmak için:

    ```
    Get-ADComputer -Filter {OperatingSystem -like "*Windows 10*"} -Properties OperatingSystem |
        Select-Object Name, OperatingSystem |
        Export-Csv -Path "C:\Raporlar\windows10_cihazlar.csv" -NoTypeInformation -Encoding UTF8
    ```

## 3. Zaman Kazandıran Mini Tüyolar

### Tüyo 1: GridView ile Anında Önizleme

CSV’ye kaydetmeden önce sonucu hızlıca görmek isterseniz, `Export-Csv` yerine `Out-
GridView` kullanın — filtrelenebilir, sıralanabilir bir pencere açar:

    ```
    Get-ADUser -Filter * -Properties Department | Select Name, Department | Out-GridView
    ```

### Tüyo 2: Tarih Damgalı Dosya Adı

Raporları düzenli çalıştırıyorsanız, dosya adına otomatik tarih eklemek karışıklığı
önler:

    ```
    $tarih = Get-Date -Format "yyyy-MM-dd"
    Get-ADUser -Filter * | Export-Csv -Path "C:\Raporlar\kullanicilar_$tarih.csv" -NoTypeInformation -Encoding UTF8
    ```

### Tüyo 3: Belirli Özellikleri Tek Seferde Keşfetmek

Bir kullanıcı/bilgisayar nesnesinde hangi özelliklerin (attribute) mevcut olduğunu
bilmiyorsanız:

    ```
    Get-ADUser -Identity "ornek.kullanici" -Properties * | Get-Member -MemberType Property | Select Name
    ```

Bu komut, o nesnede sorgulanabilecek **tüm** özellik adlarını listeler — “acaba 
bu bilgiye nasıl ulaşırım” sorusuna hızlı cevap.

### Tüyo 4: Excel’de Doğrudan Açılabilir Format

`Export-Csv` varsayılan olarak virgülle ayrılmış dosya üretir; Türkçe Excel kurulumlarında
bazen noktalı virgül (;) beklenir. Sorun yaşarsanız `-Delimiter ";"` parametresini
ekleyin:

    ```
    Get-ADUser -Filter * | Export-Csv -Path "rapor.csv" -NoTypeInformation -Encoding UTF8 -Delimiter ";"
    ```

### Tüyo 5: Birden Fazla Sorguyu Tek Dosyada Birleştirmek

Kullanıcı ve yöneticisini aynı satırda görmek gibi ilişkisel bilgi gerektiğinde:

    ```
    Get-ADUser -Filter * -Properties Manager, EmailAddress | ForEach-Object {
        [PSCustomObject]@{
            Kullanici = $_.Name
            Email = $_.EmailAddress
            Yonetici = if ($_.Manager) { (Get-ADUser $_.Manager).Name } else { "Tanımsız" }
        }
    } | Export-Csv -Path "C:\Raporlar\kullanici_yonetici.csv" -NoTypeInformation -Encoding UTF8
    ```

Bir talep geldiğinde komutu sıfırdan yazmak yerine, kendinize ait bir “script kütüphanesi”
klasöründen hazır olanı çalıştırmak hem hız hem de tutarlılık kazandırıyor — bu 
yüzden yukarıdaki komutları tek tek ezberlemek yerine, bir .ps1 dosyasında biriktirmenizi
öneririm.
