active-directory-bilgisayar-adina-gore-bilgisayar-hesaplarinin-farkli-ou-lara-tasinmasi

İster küçük ister büyük bir Active Directory yapısını yönetin farklı bilgisayar gruplarına farklı GPO lar uygulamanız gerekebilir. Örneğin Muhasebe bilgisayarlarına ayrı, satış bilgisayarlarına ayrı GPO hazırlamanız gerekebilir. Bunu yapmanın farklı yolları mevcut. Yada herhangi bir sebeple bilgisayarlarınızı belirlediğiniz isim standardına göre farklı OU larda bulundurmak isteyebilirsiniz. Varsayılanda ise Domaine alınan her bilgisayar için bilgisayar hesabı siz Active Directory Computer OU Değiştirme isimli makalemde anlattığım yöntemle değiştirmediyseniz “Computers” OU sunda oluşacaktır.

Şimdi senaryomuza göre bilgisayar hesapları her şehirdeki bilgisayarlar için il plaka kodu ile başlasın. Yani Ankara için 06-0001, Bartın için 74-001,74-002, İzmir için 35-001,35-002 gibi olsun ve Active Directory de Her şehir için alt OU lar olduğunu düşünelim.

İsmi 06 ile başlayan bilgisayar hesapları Ankara OU suna, 35 ile başlayanlar İzmir OU suna, 74 ile başlayanlar Bartın OU suna otomatik taşınsın. Bunun için aşağıdaki Powershell i kullanabilirsiniz.

Script Vikram Athare e ait.

Script:

<# 
.Link 
If you have any question, you can post to
http://vikramathare.wordpress.com/ or
https://gallery.technet.microsoft.com/PowerShell-Manage-Local-f6479d46

.Notes
Version 1.0
#>
Function Get-ComputerOU {
    param (
        [String]$ComputerName,
        [int]$i = 2
    )
    $ComputerNameInitial = $ComputerName.Substring(0,$i)
    switch ($ComputerNameInitial) {
# Change initial letter and OU DN as per your enviornment
        06 {"OU=Ankara,DC=astronur,DC=Com"} # This is just for sample. Change this line as per your requirement 
        35 {"OU=İzmir,DC=astronur,DC=Com"} # This is just for sample. Change this line as per your requirement 
        74 {"OU=Bartin,DC=astronur,DC=Com"} # This is just for sample. Change this line as per your requirement 
        default {"OU is not defined in configuration"} # Do not remove/change this line
    }
}
# Import Module ActiveDirectory
Import-Module ActiveDirectory
# Creating event log sourcce 
if((Get-ChildItem HKLM:\SYSTEM\CurrentControlSet\Services\EventLog\Application).pschildname -notcontains 'Move-ComputerPsScript') {
    New-EventLog –LogName Application –Source "Move-ComputerPsScript"
}
# Defining source container
$Domain = Get-ADDomain
$SourcePath = $Domain.ComputersContainer
# Get computers from default container
$Computers = Get-ADComputer -Filter * -SearchBase $SourcePath
# Processing each computers from default OU, move to defined OU and report to event
foreach ($Computer in $Computers) {
    try {
        $TargetOU = Get-ComputerOU -ComputerName $Computer.Name
        if (!($TargetOU -eq 'OU is not defined in configuration')) {
            Move-ADObject $Computer -TargetPath $TargetOU
            Write-EventLog –LogName Application –Source "Move-ComputerPsScript" –EntryType Information –EventID 1 –Message "$($Computer.Name) is moved from default container to $TargetOU"
        }
        else {
            Write-EventLog –LogName Application –Source "Move-ComputerPsScript" –EntryType Warning –EventID 2 –Message "$($Computer.Name) is not moved from default container because name initial is not defined in switch statement"
        }
    }
#Catch error and report to event log
    catch {
        Write-EventLog –LogName Application –Source "Move-ComputerPsScript" –EntryType Error –EventID 3 –Message `
        "$($Computer.Name) is not moved from default container`r`n
        Caught in exception while running script
        Exception Type: $($_.Exception.GetType().FullName)
        Exception Message: $($_.Exception.Message)"
    }
}

Burada 13. satırdaki 2 değeri Computers OU sundaki bilgisayar hesaplarının isimlerinin ilk 2 karakterinin okunacağı anlamına gelmekte. 18,19,20 satırlarında ise kriterlerimizi ve o kriterdeki bilgisayar hesaplarının taşnacağı OU yu belirtiyor.

Eğer sizin isim standardınıza göre ilk beş karaktere bakılarak ayırt edilmesi gerekiyorsa 13. satırdaki 2 yi 5 ile değiştirn ve 18,19,20 satırlarındaki ilk ifadeler de beş karakter olsun.

Scriptin bir güzelliğiyse başarılı ve başarısız işlemleri Event Viewer a log olarak yazıyor.

active-directory-bilgisayar-adina-gore-bilgisayar-hesaplarinin-farkli-ou-lara-tasinmasi
Event viewer

Application Loglarında “Filter Current Log…” seçeneğine basarak aşağıdaki gibi bir filtre oluşturup daha sonra bu filtreyi kaydedebilirsiniz.

active-directory-bilgisayar-adina-gore-bilgisayar-hesaplarinin-farkli-ou-lara-tasinmasi
Event Viewer Filter

Daha sonra filtreleme yaptığınızda Event ID olarak 1,2,3 görebilirsiniz.

Event ID 1 : Başarılı taşımalar

Event ID 2 : Bilgisayar ismi isim kriterlerine uymadığı için taşınamadı

Event ID 3 : Bilgisayar ismi aranan kriter uzunluğundan kısa olduğu için işlem görmedi.

active-directory-bilgisayar-adina-gore-bilgisayar-hesaplarinin-farkli-ou-lara-tasinmasi
Event viewer

Benim altyapımda 2321 kriter var. Yani 2321 isim standardına karşılık 2321 OU tanımlı bu örnekde 18,19,20 satırlarının olduğu yerde ve Computers OU sunda 750 ye yakın pc sürekli mevcut. Böyle bir durumda bu scriptin çalışması 10 saniye kadar sürüyor. Bu scripti Task Scheduler ile her 5 dakikada çalışacak şekilde kullanıyorum.

Umarım sizinde işinizi görür.

Leave a Reply

Instagram

[instagram-feed num=6 cols=6 showfollow=false showheader=false showbutton=false showfollow=false]