Aktif Dizindeki Kritik Gruplar?n Üyelik Takibi

Aktif Dizin’in yap?s? gere?i baz? gruplar?n üyeleri kritik yetkilere sahip olabilmektedir. Örnek vermek gerekirse Enterprise Admins grubuna üye olan bir kullan?c? Forest üzerindeki bütün Domain’lerde tam yetkiye sahip olmaktad?r. Administrators, Domain Admins, Schema Admins ve Account Operators gruplar? da kritik gruplardan baz?lar?d?r. Bu gruplara eklenen kullan?c?lar ekti alan? üzerinde kritik yetkilere sahip olmakta; kullan?c? gruptan ç?kar?ld???nda bu yetkiler elinden al?nmaktad?r. Bahsetti?imiz bu kritik gruplar etki alan? yönetiminde önem arz etti?inden üyeliklerinin takibi kritiktir.
??te bu makalede kritik yetki gruplar?n?n üyelerinin takibi i?ini powershell ile gerçekle?tirece?iz.
Scriptimiz ?u ?ekilde:

Script k?sa?a ?u ad?mlar? gerçekle?tiriyor.
– gruplar.txt dosyas?nda ad? yaz?lm?? olan gruplar? çek
– Çekilen gruplar için tmp klasörü alt?nda her grubun ad?na bir grup ad?nda bir txt dosyas? yarat ve grup üyelerini bu dosyalara yaz
-daha önce gruplar klasörü alt?nda her grup için grup ad?nda olu?turulmu? txt dosyas?ndaki üyeler ile yeni olu?turulan dosyalar? kar??la?t?r.
– Kar??la??lan farkl?l?klar? log.txt dosyas?na kaydet

K?saca anlatmak gerekirse: Script çal??t??? anda kritik olarak belirlenen(gruplar.txt alt?na ad? yaz?lm?? olan) gruplar?n üyelerini grup ad?yla ayn? olan bir txt dosyas?na yazmaktad?r. Bir sonraki çal??t?r?ld???nda ise yeni durumu aktif dizinden çekip bir önceki durumla kar??la?t?rmakta ve sonucu raporlamaktad?r.

Scriptin Metin halini en altta sizlerle payla?aca??m.

Benim örne?imde gruplar.txt dosyas?n?n içeri?i ?u ?ekilde:

Scriptin çal???rl???n? test etmek için TestUser kullan?c?s?n? takip edilen gruplara birkaç kere ekleyip ç?kar?lm??t?r. Sonuç olarak log.txt dosyas?nda istedi?im sonuca ula?m??t?r.

4

Script ?u anki haliyle ancak elle çal??t?r?ld???nda istenilen sonucu vermektedir. Basit birkaç de?i?iklikle scriptin zamanlanm?? görev haline getirilmesi ve üyeliklerdeki de?i?iklikleri mail ile sorumlu ki?ilere bildirmesi sa?lan?rsa gerçek hayatta yararl? bir uygulama haline gelecektir.

Script’in metin hali ?u ?ekilde:
_________________________________________

cd C:\powershell\ADShot

Import-Module activedirectory

$File=Get-Item gruplar.txt
$FilePath=$File.ToString()
$gruplar=Get-Content $FilePath

foreach($grup in $gruplar)
{
$group =Get-ADGroup $grup
$fileName=$group.SamAccountName
New-Item .\tmp\$fileName.txt -ItemType file -Force
$members=$group|Get-ADGroupMember
foreach($member in $members)
{
$member.SamAccountName >> .\tmp\$fileName.txt
}
}

$rapor=””
$tarih=Get-Date

foreach($grup in $gruplar)
{
$eskiUyeler = Get-Content C:\powershell\ADShot\gruplar\$grup.txt
$eskiUyelerTum =[IO.File]::ReadAllText(“C:\powershell\ADShot\gruplar\$grup.txt”)

$yeniUyeler = Get-Content C:\powershell\ADShot\tmp\$grup.txt
$yeniUyelerTum =[IO.File]::ReadAllText(“C:\powershell\ADShot\tmp\$grup.txt”)

foreach($eskiUye in $eskiUyeler)
{
if($yeniUyelerTum.Contains($eskiUye))
{}
else
{
$rapor += “,$grup grubundan $eskiUye ç?kar?lm??”
$rapor += ” `n ”
}
}
foreach($yeniUye in $yeniUyeler)
{
if($eskiUyelerTum.Contains($yeniUye))
{}
else
{
$rapor += “,$grup grubuna $yeniUye eklenmi?”
}
}

}

if($rapor -ne “”)
{
$rapor = “”+$tarih+$rapor
$rapor >> .\log.txt
}

Remove-Item .\gruplar\*.txt -Force

Move-Item .\tmp\*.txt .\gruplar -Force

.\log.txt