İ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.
Application Loglarında “Filter Current Log…” seçeneğine basarak aşağıdaki gibi bir filtre oluşturup daha sonra bu filtreyi kaydedebilirsiniz.
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.
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.