Active Directory OU Yapılarını Dışa ve İçe Aktarma İşlemi
Active Directory’de Organizational Unit (OU) yapılarını dışa ve içe aktarmak, özellikle büyük ortamlarda zaman kazandıran önemli bir işlemdir. Tek tek OU oluşturma zahmetinden kurtulmak isteyenler için bu yöntem, test ortamlarında da kullanılabilir ve bir CSV dosyası olarak dışa aktarılan veriler, dilediğiniz zaman başka bir Domain Controller’a (DC) aktarılabilir. Bu yazıda, Active Directory OU aktarma (içe ve dışa) sürecini adım adım ele alacağız.
OU Yapılarını Dışa Aktarma
OU yapısını dışa aktarmak için öncelikle PowerShell’de New-ADOrganizationalUnit cmdlet’ini kullanmanız gerekir. Bu cmdlet, OU’ların isimlerini ve yollarını belirlemenize olanak tanır. Ancak, Get-ADOrganizationalUnit yolu belirleyemez; bunun yerine DistinguishedName ile işlem yapmanız gerekmektedir.
Bu konuda net bir kaynak bulmak için yaptığım araştırmalar sonucunda, çeşitli PowerShell parçalarını bir araya getirerek ihtiyaç duyduğum çözümü oluşturdum. Bu süreçte Regex (Düzenli İfadeler) kullanımını da öğrendim. Regex, nasıl kullanacağınızı bildiğinizde oldukça güçlü bir araçtır. Aşağıda, oluşturduğum iki farklı versiyonu bulabilirsiniz.
1. PowerShell Komutları
powershellKodu kopyala$OUs = Get-ADOrganizationalUnit -Filter * | select name, DistinguishedName, @{n=’OUPath’; e={$_.distinguishedName -replace '^.+?,',''}}, @{n=’OUNum’; e={([regex]::Matches($_.distinguishedName, “OU=”)).count}} | Sort OUNum | export-csv C:<Path_to_CSV>OUTree.csv -NoTypeInformation
Bu komut, OU adını etkili bir şekilde alır ve OU Adını dışa aktarırken ilk ‘,’ ile ayırır.
powershellKodu kopyala$OUs = Get-ADOrganizationalUnit -Filter * | select name, DistinguishedName, @{n=’OUPath’; e={$_.distinguishedName -replace '^.+?,(CN|OU|DC.+)','$1'}}, @{n=’OUNum’; e={([regex]::Matches($_.distinguishedName, “OU=” )).count}} | Sort OUNum | export-csv C:<Path_to_CSV>OUTree.csv -NoTypeInformation
Bu ikinci komut ise ilk ‘,’den sonraki her şeyi yakalar ve dizeyi o kısımla değiştirir. Her iki yöntem de benzer sonuçlar üretir ancak farklı Regex kullanımlarıdır.
OU Sayısı ve Sıralama
Her iki komut da ‘OUNum’ adında bir özellik içerir. Bu özellik, DistinguishedName dizesinde ‘OU=’ öğesinin kaç kez göründüğünü sayar. OU’lar sıralı bir şekilde oluşturulmalıdır, böylece ana OU’lar alt OU’lardan önce oluşturulmuş olur. Bu işlem, OU’ları CSV’ye aktarmadan önce ‘katmanlara’ ayırır. Örneğin, kök dizindeki OU’lar 1, içindeki OU’lar 2 değerini alır.
Dışa Aktarılan Verilerle Etki Alanı Değişikliği
Verileri dışa aktardıktan sonra, etki alanını değiştirmeniz gerekebilir. Başka bir etki alanına aktarıyorsanız, DistinguishedName öğelerini değiştirmek gerekecektir. Örneğin, bir metin düzenleyicide DC=lab,DC=local ifadesini DC=lab2,DC=local ile değiştirmek bu durumu çözecektir. Dilerseniz bu adımı dışa aktarmadan önce de gerçekleştirebilirsiniz.
OU Yapılarını İçe Aktarma
Dışa aktardığınız CSV dosyasını başka bir DC’ye aktarmak için aşağıdaki komutu çalıştırabilirsiniz:
powershellKodu kopyala$OUs = import-csv C:<Path_to_CSV>OUTree.csv
ForEach ($OU in $OUs) {
New-ADOrganizationalUnit -Name $OU.Name -Path $OU.OUPath
}
Bu komut, CSV’deki OU’ları yeni DC’de yeniden oluşturacaktır.
Sonuç
Active Directory OU yapılarını dışa ve içe aktarma işlemi, zaman kazandıran ve yönetim süreçlerini kolaylaştıran bir yöntemdir. Powershell ve Regex kullanarak bu işlemi kolayca gerçekleştirebilir, aynı zamanda farklı etki alanlarına geçiş yaparken önemli verilerinizi koruyabilirsiniz.