Active Directory

Active Directory OU Aktarma (İçeri ve Dışarı)

Saha notu / teknik rehber Son kontrol 12 Eylül 2026 Konu merkezine dön →
Tolga CEYHAN Sistem Yönetimi & IT

Active Directory OU yapısını PowerShell ile CSV dosyasına aktarmak ve kontrollü biçimde yeniden oluşturmak; lab kurulumu, yapı standardizasyonu ve OU tasarımının dokümantasyonu gibi senaryolarda oldukça kullanışlıdır. Bu rehberde OU ağacının dışa aktarılması, parent-child sırasının korunması, hedef domain bilgisinin uyarlanması ve içe aktarma sonrasında doğrulama adımlarını ele alıyorum.

Active Directory OU yapısını PowerShell ile dışa ve içe aktarma
Active Directory OU yapısının CSV ile taşınması.

Amaç ve Kapsam

Buradaki işlem kullanıcıları, bilgisayarları, GPO bağlantılarını veya OU üzerindeki tüm delegasyonları taşıyan tam bir Active Directory migration değildir. Amaç OU hiyerarşisini dışa aktarmak ve hedef ortamda aynı organizasyon yapısını yeniden oluşturabilmektir.

Ön Koşullar

  • Active Directory PowerShell modülü
  • Kaynak ortamda OU’ları okuyabilecek yetki
  • Hedef ortamda OU oluşturabilecek yetki
  • CSV dosyasının güvenli bir çalışma dizininde tutulması
  • Üretim öncesinde lab veya kontrollü OU altında test

OU Yapısını İnceleme

Önce mevcut OU yapısını doğrudan görüntüleyin:

Get-ADOrganizationalUnit -Filter * |
    Select-Object Name, DistinguishedName |
    Sort-Object DistinguishedName

Bu çıktı, aktarım öncesinde beklenmeyen veya artık kullanılmayan OU’ları fark etmek için de yararlıdır.

OU Yapısını CSV’ye Aktarma

Bir OU yeniden oluşturulurken -Name ile OU adı, -Path ile parent konumu gerekir. Bu nedenle DistinguishedName içinden parent path’i çıkartıp hiyerarşi derinliğini de kaydediyoruz:

$OUs = Get-ADOrganizationalUnit -Filter * | ForEach-Object {
    [PSCustomObject]@{
        Name              = $_.Name
        DistinguishedName = $_.DistinguishedName
        OUPath            = $_.DistinguishedName -replace '^.+?,',''
        Depth             = ([regex]::Matches($_.DistinguishedName, 'OU=')).Count
    }
}

$OUs |
    Sort-Object Depth |
    Export-Csv 'C:TempOUTree.csv' -NoTypeInformation -Encoding UTF8

Depth alanı önemlidir. Parent OU oluşturulmadan child OU oluşturulmaya çalışılırsa işlem başarısız olur. Bu nedenle içe aktarma sırasında düşük derinlikteki OU’lar önce işlenmelidir.

CSV Çıktısını Doğrulama

Import-Csv 'C:TempOUTree.csv' |
    Sort-Object {[int]$_.Depth} |
    Format-Table Name, OUPath, Depth -AutoSize

İçe aktarmadan önce OUPath değerlerini özellikle kontrol edin. Kaynak ve hedef domain DNS adları farklıysa CSV’deki DC= bileşenlerinin hedef domain yapısına göre uyarlanması gerekir.

Hedef Domain İçin Path Dönüştürme

Örneğin kaynak DN sonu DC=lab,DC=local, hedef ise DC=lab2,DC=local ise CSV üzerinde kontrollü dönüşüm yapılabilir. Gerçek üretim domain bilgilerini script içine sabitlemek yerine değişken kullanmak daha güvenlidir:

$SourceBase = 'DC=lab,DC=local'
$TargetBase = 'DC=lab2,DC=local'

$OUs = Import-Csv 'C:TempOUTree.csv'
$OUs | ForEach-Object {
    $_.OUPath = $_.OUPath -replace [regex]::Escape($SourceBase), $TargetBase
}

$OUs | Export-Csv 'C:TempOUTree-Target.csv' -NoTypeInformation -Encoding UTF8

OU Yapısını İçe Aktarma

Önce -WhatIf ile hangi işlemlerin yapılacağını görün:

$OUs = Import-Csv 'C:TempOUTree-Target.csv' |
    Sort-Object {[int]$_.Depth}

foreach ($OU in $OUs) {
    New-ADOrganizationalUnit `
        -Name $OU.Name `
        -Path $OU.OUPath `
        -WhatIf
}

Çıktı beklendiği gibiyse -WhatIf kaldırılarak gerçek oluşturma işlemi yapılabilir.

Doğrulama

İçe aktarma tamamlandıktan sonra hedef ortamın OU listesini yeniden alın:

Get-ADOrganizationalUnit -Filter * |
    Select-Object Name, DistinguishedName |
    Sort-Object DistinguishedName

Kaynak ve hedef CSV’leri karşılaştırmak, eksik veya yanlış path ile oluşturulmuş OU’ları tespit etmeyi kolaylaştırır.

Troubleshooting

The object does not exist hatası

Genellikle parent OU henüz oluşturulmamıştır veya OUPath hedef domain ile eşleşmiyordur. Depth sırasını ve DN bileşenlerini kontrol edin.

Object already exists hatası

Hedef ortamda aynı OU zaten bulunuyor olabilir. Toplu çalıştırmadan önce mevcut yapıyı envanterleyin; scripti doğrudan tekrar çalıştırmak yerine mevcut nesneleri kontrol eden idempotent bir yaklaşım kullanın.

Access is denied

Hedef container veya parent OU üzerinde OU oluşturma yetkisini ve varsa delegasyon modelini kontrol edin.

Güvenlik ve Best Practice

  • CSV dosyasında gerçek kurum/domain bilgileri bulunuyorsa dosyayı herkese açık konumlarda tutmayın.
  • Üretim ortamında doğrudan toplu oluşturma yerine önce -WhatIf kullanın.
  • OU ağacını taşımadan önce eski veya gereksiz OU’ları temizleme fırsatı olarak değerlendirin.
  • GPO linkleri, delegasyonlar ve OU içindeki nesnelerin bu işlemle otomatik taşınmadığını unutmayın.
  • Kaynak ve hedef yapıyı işlem sonunda ayrı ayrı raporlayın.

Sonuç

PowerShell ile OU yapısını CSV’ye aktarmak, Active Directory organizasyon modelini dokümante etmek ve kontrollü biçimde yeniden oluşturmak için pratik bir yöntemdir. Güvenilir bir aktarım için asıl kritik noktalar parent-child sırasını korumak, hedef DistinguishedName yapısını doğru dönüştürmek ve değişiklikleri uygulamadan önce doğrulamaktır.

İlgili Rehberler

PROFESYONEL PROFİL

Bu teknik içeriğin arkasındaki deneyimi inceleyin.

Microsoft altyapıları, Active Directory, SCCM, PowerShell, Windows Server ve VMware odaklı teknik profil ve proje çalışmaları.

Projeler & Vaka Çalışmalarıİngilizce Profil

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir