SQL Server Veritaban? Log Dosyas?n?n Küçültülmesi ( Shirink File )

SharePoint Config Log dosyas? büyüme e?ilimi olan bir dosyad?r ve genelde a??r? büyüyerek sorun yarat?r.Ayn? durum ba?ka databaselerde de görülebilir.

Database’in boyutunu azaltmak için Microsoft SQL Server Management Studio ‘da Shrink task ‘? çal??t?rmak zorunday?z.

Bildi?iniz gibi Full Recovery Model de Transaction Log backup ? al?nmad??? sürece Commit edilmemi? transaction‘lar log dosyas?ndan silinmeyece?i için log dosyas? plan d??? büyüyüp DB yi eri?ilmez duruma getirebilir. Bu yüzden Recovery Model ‘lerini Full da b?rakmamak gerekir. Önce Recovery Modelini simple yapal?m. Microsoft SQL Server Management Studio ‘da Shrink yapmak istedi?iniz Database ‘i seçin ve New Query ‘yi t?klay?n ve a?a??daki Query ‘yi girip Execute ‘e t?klar?n.

USE veritabaniadi;
GO
ALTER DATABASE veritabaniadi
SET RECOVERY SIMPLE;
GO

 

 

3. Databaseler’den ” Boyutu Büyük Olan Database ” ‘in üstüne sa? t?klay?n (yada loglar? a??r? büyümü? olan database’i seçin) Tasks ‘? seçin ve Shrink‘den Files ‘? seçin.

4. From the Shrink Filepenceresinde File type’dan Log ‘u seçin

 

5. OK ‘i t?klay?n.


Sonra isterseniz Database recovery model ‘i Tekrar Full yapabilirsiniz.


ALTER DATABASE veritabaniadi
SET RECOVERY FULL;
GO

Powershel ile Cisco Switch’ler Üzerinde Yedek ve Rapor Al?nmas? (Taking Back Up and Report From Cisco Switches With Powershell)

Merhaba arkada?lar,
Bu makalede powershell üzerinden plink.exe’yi kullanarak ssh ba?lant? kurma ve bu ba?lant? sayesinde cisco switch’ler üzerinden yedek alma ve raporlama i?lemlerine de?inece?im.

Plink.exe, Putty.exe’nin komut sat?r? uygulamas?d?r ve http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html adresinden edinilebilir.

Senaryo olarak elimizde 10.1.11.10 Ip adresli bir switch’imiz var bu switch’in kullan?c? ad? “cisco” ve ?ifresi “cisco”. Kulland???m?z switch’imiz üzerinde herhangi bir sertifika otoritesinden al?nm?? bir sertifika kullan?lmamaktad?r. Bu nedenle uygulamay? çal??t?rmadan bir kerelik plink.exe ile manuel bir ba?lant? aç?yoruz ve gelen sertifika uyar?s?n? kabul ediyoruz.

Ayr?ca switch’e login olundu?unda do?rudan enable modunda i?lem yapmak gerekmektedir.(Bir sat?rdan fazla gönderinle komutlar farkl? IOS’larda desteklenmedi?inden tek sat?r komut gönderilmektedir. Bu nedenle privilege 15 olarak login olmak gerekmektedir.) Bu i?lem için standart ayarlar?n d???ndan swith’in ayar dosyas?na a?a??daki komutlar? ekliyoruz.
aaa new-model
aaa authentication login default local
aaa authorization exec default local
username cisco privilege 15 password cisco

Sonuç olarak elimizde switch’e login olundu?unda do?rudan enable moda geçen bir kullan?c?m?z var plink.exe ile ba?lant? kurdu?umuzda swith’in sertifikas? art?k kabul ediliyor.
Geçelim uygulamam?za:
Uygulaman?n bulundu?u dizinin görünü?ü ?u ?ekilde

Sshconnect.ps1 gerekli powershell scriptimizin bulundu?u dosyad?r. Komutlar? a?a??da tekrar payla?aca??m.

Devices.txt ise raporlama ve yedekleme yap?lacak cihazlar?n isim ve IP adreslerinin bulundu?u dosyad?r. Bu dosya içeri?inde isim ve IP aras?nda “;” kullanmak ve her cihaz? yeni bir sat?ra yazmak gerekmektedir.

Commands dizinin içeri?i ?u ?ekildedir:

Bu dizin içindeki dosyalar?n içeri?i de a?a??daki gibi:

Bu ad?mdan sonra uygulamam?z? çal??t?r?yoruz.

Uygulama backups dizini alt?na yeni bir klasör yarat?p yedekleri ve raporlar? buraya yazmaktad?r.


Uygulaman?n ç?kt? olarak üretti?i dosyalar?n içerikleri de ?u ?ekilde:

Gelelim uygulaman?n nas?l çal??t???n? detayl? olarak anlatmaya:
Script devices.txt dosyas? içindeki tüm cihazlar belirtilen kullan?c? ad? ve ?ifresi ile ba?lant? kurmaktad?r. Ba?lant? kurulan her switchde commands dizini içindeki tüm komutlar? çal??t?rmaktad?r. Bu komtlar?n ç?kt?lar? bacups dizini içerisine kaydedilmektedir. Bu sayede switch konfigürasyon yede?inin al?nmas? veya switch’ler üzerinden h?zl?ca raporlama yap?lmas? mümkün olabilecektir.
Uygulamada kullan?lan powershell scripti ?u ?ekilde:
$plink=Get-ChildItem plink.exe
$PlinkPath=$plink.tostring()

$username=”cisco”
$password=”cisco”

$devicesFile=Get-Item devices.txt
$devicesFilePath=$devicesFile.ToString()
$devices=Get-Content $devicesFilePath

$backup=Get-Item backups
$backupPath=$backup.ToString()

#$command=Get-ChildItem komut1.txt
#$commandPath=$command.tostring()
#$commandName=$commandPath.Substring($commandPath.LastIndexOf(‘\’)+1)
#$commandName=$commandName.Substring(0,$commandName.Indexof(‘.’))

$yol=Get-Item .\commands

$tarih=Get-Date -Format g
$tarih=$tarih.Replace(” “,””)
$tarih=$tarih.Replace(“:”,”.”)
$tarih=$tarih.Replace(“.”,”_”)

md $backupPath\$tarih

$commands=Get-ChildItem $yol
foreach($device in $devices)
{
$SshHostName=$device.substring(0,$device.indexof(‘;’))
$SshHost=$device.substring($device.indexof(‘;’)+1)
foreach($file in $commands)
{
$commandPath=$file.fullName
$commandName=$commandPath.Substring($commandPath.LastIndexOf(‘\’)+1)
$commandName=$commandName.Substring(0,$commandName.Indexof(‘.’))

$yer=$backupPath+”\”+$tarih+”\”+$SshHostName+”_”+$SshHost+”_”+$commandName+”.txt”

.\plink.exe -ssh -2 $SshHost -l $username -pw $password -m $commandPath > $yer

}
}

Write-Host “ISLEM TAMAMLANDI”

Bu powershell komutu zamanlanm?? görev haline getirilerek yedekleme ve raporlaman?n otomatik al?mas? sa?lanabilir. Powershell komutunun nas?l zamanlanm?? görev haline getirilece?i ile ilgili ?u makaleden yard?m alabilirsiniz:

http://sistemtecrubeleri.blogspot.com/2012/12/sunucu-veya-ag-cihazlarnn.html

Ayr?ca ?u an uygulamada kullan?c? ad? ve ?ifresi aç?k olarak bulunmaktad?r. Bu dosyan?n sunucu üzerinde bulunmas? sizi rahats?z edebilir. Kullan?c? ad? ve ?ifresinin kriptolu olarak saklamak için ?u makaleden yararlanabilirsiniz:

http://sistemtecrubeleri.blogspot.com/2012/12/powershell-ile-text-sifrelemek.html

Bu makaleden yararlanarak a?a??daki uygulamalar geli?tirilebilir.
1. Ortamdaki tüm Switch’lerdeki Error Disable Durumundaki portlar?n raporlanmas?:

Tüm switch’lerin interface status’lar?n? çektikten sonra elde edilen dosyalar üzerinde Dosya ve string i?lemleri ile sadece Error Disable Portlar?n raporlanmas? yap?labilir.

2. Ortamdaki tüm switch’lerdeki portlarda kullan?lan IP numaralar?n?n raporlanmas?

Tüm swithc’lerden mac address-table’lar? çekilir.(Bu tabloda mac adresi ve switch’in port e?le?mesi vard?r.) Routing i?lemi yapan cihazdan Arp tablosu çekilir(Bu tabloda Ip adresi ve Mac Adresi e?le?meleri bulunmaktad?r.) Elde edilen mac ve arp tablolar? dosya ve string i?lemleri ile e?le?tirilerek switch’lerin hangi portunda hangi IP adresinin kullan?ld??? raporuna ula??labilir.

?imdilik benim akl?ma gelenler bu ?ekilde ihtiyaçlar do?rultusunda ba?ka uygulama ve raporlar geli?tirilebilir.

Powershell ?le Disk Kullan?m?n?n Takibi (Disk Usage Control With Powerhsell)

Merhaba arkada?lar;
Bu makalede sunucu veya bilgisayarlar?n?n?z disk durumlar?n? inceleme ve belli kriterler alt?nda uyar? üretme i?lemininin powershell ile nas?l yap?laca??n? anlataca??m.
Senaryo olarak elimizde sunucular?m?z var. Bu sunucular üzerindeki disklerde hizmet verebilmek için yeterli miktarda bo? yer olmas? gerekiyor. Sunucu disklerinin dolmas?ndan önce kendi belirtece?imiz kriterlere göre sistemin bizi uyarmas?n? istiyoruz. Burada araya girerek ?unu eklemem gerek bu i?lem SCOM ve benzeri sistemler ile zaten yap?labilmektedir. Manuel olarak ise belli aral?klarla diskler kontrol edilerek sorun giderilebilir. Biz senaryo olarak herhangi bir izleme sistemine sahip olmad???m?z? ve manuel kontrol yapmak istemedi?imizi varsay?yoruz. Zaten sununu say?s? artt?kça manuel kontrol i?lemi içinden ç?k?lamaz bir sorun halini al?r. Ayr?ca i?leri powershell’e yapt?rmay? çok sevdi?imizden bu i?i de powershell vas?tas?yla yap?yoruz. JJJ.
Kodumuz sunucu listemizdeki tüm sunucular?n disk bilgilerini okuyacak ve bizim istedi?imiz kritere göre uyar? üretecek. Bu makale için benim tan?mlad???m kriter ?u ?ekilde “Diskte bo? yer 100 GB’?n alt?na indiyse ve diskteki bo? alan miktar? % 15’in alt?nda ise uyar? üret”. Bu kriteri kod üzerinde basit de?i?iklikler ile kendi iste?iniz do?rultusunda de?i?tirebilirsiniz.
Öncelikle Script’in sunucular?n bilgilerini okuyaca?? bir text döküman?na ihtiyac?m?z var. Bizim text döküman?m?z a?a??daki resimdeki gibi. Sunular?n?z?n ismini ya da IP adresini yazman?z yeterli.

Bu a?amadan sonra scriptimizi sizinle payla?ay?m.

H?zl?ca anlatmak gerekirse. Servers.txt dosyas?ndan sunucu bilgilerini okuyoruz. Her sunucudan WM? yard?m?yla disk bilgilerini çekiyoruz. Çekti?imiz disk bililerine göre disk boyutu s?f?r de?il ve 10 GB’dan(burada asl?nda incelenecek disk seçme i?lemi yap?yoruz ve disk tipine göre de i?lem yap?labilir.) büyük ise kriterimizi i?letiyoruz. Kritere uyan hallerde uyar? üretip bir de?i?kene bu uyar?y? yaz?yoruz. En sonda da uyar?lar?n bulundu?u de?i?kenin içeri?ini ekrana yazd?r?yoruz. Script’i makalenin sonunda metin olarak payla?aca??m.
Script’i çal??t?rd?ktan sonraki ekran görüntüsü ?u ?ekilde:

Script’in metni de ?u ?ekilde:
$servers=Get-Content servers.txt
$1GB=1073741824

$metin=””
$tarih=Get-Date

foreach($server in $servers)
{
$disks=get-WmiObject win32_logicaldisk -Computername $server

foreach($disk in $disks)
{
$id=$disk.DeviceID
$size=$disk.Size
$freeSpace=$disk.FreeSpace
$size=[double]$size
$freeSpace=[double]$freeSpace

$free=(($freeSpace/$size)*100)

if(($size -ne 0) -and ($size -gt 10*$1GB))
{
$size=[math]::floor($size/$1GB)
$freeSpace=[math]::floor($freeSpace/$1GB)
$free=[math]::floor($free)
if(($freeSpace -lt 100) -and ($free -lt 15))
{
#Write-Host $server Sunucusunda $id diskinde $freeSpace GB bo? yer kald? ve diskte % $free lik bo? yer var. Diskin Boyutu= $size GB
$metin+=”$server Sunucusunda $id diskinde $freeSpace GB bo? yer kald? ve diskte % $free lik bo? yer var. Diskin Boyutu= $size GB”
$metin+=”`n”
}
}
}
}
$metin+=$tarih

$metin

Bu script ?u haliyle pek de i?e yarar de?il çünkü uyar?y? almak için elle komut çal??t?rmak gerekiyor. Bu scriptin daha i?levsel olabilmesi için bu kontrolü belli aral?klarla otomatik olarak yapmas? ve herhangi bir uyar? olu?ursa bunu mail ile göndermesi daha sa?l?kl? olacakt?r.

Aktif Dizinde Dinamik Güvenlik Gruplar? (Dynamic Security Groups in Active Directory)

Merhaba bu makalemde Aktif Dizin üzerinde Dinamik Güvenlik Gruplar?n? (Dynamic Security Groups) anlataca??m. Türkçe bir isim koymak gerekirse “Belli bir kritere göre üyeleri otomatik düzenlenen gruplar” ismi uygun olabilir. Kolayl?k olsun diye bundan sonra Dynamic Security Group yerine DSG k?saltmas?n? kullanaca??m. “Bu DSG de nerden ç?kt??”,”Dynamic Distribution Group olmas?n o ?” dedi?inizi duyar gibiyim. Hay?r DSG’den bahsediyorum. Bu ?u an için (2012 R2) aktif dizinde var olan bir teknoloji de?il. Biraz ak?l, biraz ilham ve biraz da powershell gücü ile kendimizin olu?turaca?? bir obje olacak.

Malum üzere Aktif Dizin üzerindeki Security Gruplar? aktif dizin var oldu?undan bu yana hayat?n? sürdürmekte. Bizler yani sistem yöneticileri security gruplar?n? severiz ve i?imiz gere?i çok kullan?r?z. Dosya payla??m sunucular?nda, grup politikalar?nda ve benzeri yetki i?lemlerinde security gruplar?na çokça ba?vururuz; çünkü yetki alma ve verme i?lemlerinde yapaca??m?z tek i? aktif dizin üzerinden gruba kullan?c? ekleme ve kullan?c? ç?karma i?lemi olacakt?r. Zira her i?lem için ilgili dosya sunucusundaki payla??ma veya grup politikas? üzerindeki ayara gidiyor olmak can s?k?c? hale gelmektedir. Duruma göre i?imizi kolayla?t?ran sevgili dostlar?m?z security gruplar?n?n önemli bir sorunu vard?r. Bu sorun bu dostlar?m?z?n üyelik i?lemlerinin manuel olmas? yani grup üyelerinin statik olmas?d?r. ??te bu makalede üyeleri belirli bir k?s?ta göre otomatik olarak eklenen veya ç?kar?lan yani üyeleri dinamik olarak de?i?en gruplar? inceleyece?iz. Üyelerinin dinamik olarak de?i?mesi nedeniyle bu gruplara Dinamic Distribution Group (DSG) ismi verilmektedir.

Biraz önce de söyledi?im gibi DSG bir ?arta göre üyeleri otomatik olarak de?i?en gruptur. Bu ?art ?u ?ekillerde olabilir: “?sminde Ahmet geçen kullan?c?lar”,“Job Title’?nda admin geçen kullan?c?lar”,”Department’i Network olan kullan?c?lar”, “Job Title’? Master olan ve Department’i Software olan kullan?c?lar”, “Department’i insan kaynaklar? olan veya department’inde kaynak geçen kullan?c?lar”, vb. Bu örnekleri uzatabiliriz. DSG’yi olu?turmak için ihtiyac?m?z olan iki ?ey var. Bunlar bir grup ve grubun üyelerini belirleyecek bir k?s?t’t?r. Aktif dizin kullan?c? objesinin Attribute’lerinin herbiri tek tek veya kombinasyonlu ?ekilde k?s?t olarak kullan?labilmektedir.

Gelelim i?in yap?l?? k?sm?na. Test ortam?m?n domain ad? akd.local. Yukar?da bahsetti?im i?lemleri yapmay? iki powershell scripti ile yapabildim. Biri DGS’leri olu?turmak için kullan?lacak biri de DSG yap?s?n? yönetmek için kullan?lacak script’tir. Öncelikle Create_DSG.ps1 yani DSG’leri olu?turmak için kulland???m powershell script’inden bahsedece?im. Script ?u ?ekilde:

cript’i çal??t?rd???m?zda s?ras?yla öncelikle olu?turulacak grup ismini, grup üyeleri için istenilen ?art? sormakta ve bir do?rulamadan sonra grubu olu?turmaktad?r. Scripti çal??t?ral?m.

Grup ismine Admins veriyoruz.

Condition olarak (title=*admin*) yaz?yoruz.

Yani Job title’?nda admin geçen kullan?c?lar?n bu grubun üyesi olmas?n? istiyoruz. Script bu a?amada bize faydal? olabilecek ba?ka örnekleri sunuyor.

Açmak üzere oldu?umuz grubun ad?n? ve ?art?n? görüyoruz ve i?leme devam ediyoruz.

Script ba?ar?l? bir ?ekilde çal??t???nda belirtti?imiz isimde bir grubu Aktif dizinde Dynamic Security Groups OU’su alt?nda olu?turmaktad?r. Bu i?lemden önce belirtilen OU’yu aktif dizinde yaratmak gerekecektir. Script grup için belirtti?imiz Condition’u grubun Description k?sm?na yazd?. Grup üyeliklerini düzenleyecek olan ikinci scriptimiz bu k?sm? okuyup grup üyeliklerini düzenleyecek. Grupla ilgili k?s?t? sonradan de?i?tirmek istedi?inizde tek yapman?z gereken Description’daki “Condition is ” den sonraki k?sm? de?i?tirmek olacakt?r.

Grubumuzun henüz üyesi bulunmamakta.

Sistemin çal??ma mant???n? daha iyi anlatmak için iki yeni grup daha olu?turuyoruz. Asl?nda sistemin çal??ma mant???n? anlad?ktan sonra grup olu?turma i?lemini elle de yapabiliriz. Ancak kar???kl??a neden olmamak için bunu ?u an tavsiye etmiyorum. Scripti text olarak makalenin sonunda sizlerle payla?aca??m.

Gelelim as?l i?i yapacak scriptimize: Bu script DSG’leri yönetme i?ini yapt??? için DSG_Manager.ps1 ismine sahip. ?çeri?i ?u ?ekilde:

K?saca anlatmak gerekirse scriptin yapt??? i?lem ad?mlar? ?öyle:

· DSG’lerin bulundu?u OU alt?ndaki bütün gruplar? oku.

· Her grup için grubun Conditon’unu grubun description k?sm?ndan oku

· Aktif dizinden bu Condition’a uyan kullan?c?lar? çek.

· Grubun üyelerinden bir önceki ad?mda çekilen listede olmayan kullan?c?lar? gruptan ç?kar.

· Son olarak iki önceki ad?mda çekilen kullan?c? listesini gruba ekle. Burada zaten grupta olan kullan?c?lar için bir sorun olmamaktad?r. Sadece iki önceki ad?mda çekilen listede olup da gruba üye olmayan kullan?c?lar için i?lem yap?lmaktad?r.

Bu script’i de text olarak makalenin sonunda sizlerle payla?aca??m.

Scripti çal??t?rd?ktan sonra grup üyelikleri otomatik olarak yap?lmaktad?r.

SystemAdmins grubunun üyelerinden SystemAdmin11 kullan?c?s?n?n Job Title’? ve Department bilgisi incelendi?inde belirtilen ?arta uygun oldu?u görülmektedir.

Grup üyelerini silelim, gruba ?arta uymayan kullan?c? ekleyelim, kullan?c?lar? grubun ?art?na uygun hale getirelim, grubun ?art?na uyan kullan?c?lar?m?z? grubun ?art?na uymaz hale getirelim. DSG_Manager.ps1 i çal??t?rd?ktan sonra her ?ey düzelecek DSG’ler ?artlar?na uygun hale gelecektir. Bu a?amada “Bu nas?l dinamik i?lem ben ikide bir komut mu çal??t?raca??m?” dedi?inizi duyar gibiyim. Cevab?m Hay?r.

Komutu otomatik çal???r hale getirmek için Task Scheduler’i kullanaca??z.

Task Scheduler’a yeni görevimiz için h?zl?ca göz atal?m.



DSG_Manager.ps1 scripti her 5 dakikada bir çal??acak ?ekilde ayarland?. Yani DSG’lerin grup üyelikleri en geç 5 dakika içerisinde kendi condition’una göre düzeltilecektir.

Bu i?lemi tamamlad?ktan sonra DSG i?lemini tamamlam?? bulunuyoruz. Bu sayece, aktif dizinde kullan?c? bilgileri düzgün girilerek, birimi de?i?en bir kullan?c?n?n dosya payla??mlar?na otomatik olarak eri?mesini sa?layabiliriz. Ya da bir grup bilgisayar üzerinde yetkili olmas? için grup politikas? üzerinden yetki verdi?imiz bir gruba yeni sistem yöneticisi olan birisinin otomatik olarak dahil edilmesini sa?layabiliriz. Ben DSG’nin 2012 R2 sonras?ndaki Server i?letim sistemlerinde Microsoft taraf?ndan yap?laca??n? dü?ünüyorum. Ancak ?u an için DSG mevcut olmad???ndan yukar?da anlatt???m yakla??mla DSG’nin gerçekle?tirilmesi mümkün. Gelelim Scriptlerimize:

Create_DSG.ps1________________________________________________________
$domainDN=”DC=akd,DC=local”

cls
Write-Host ” ”
Write-Host “Please enter the NAME of Dynamic Security Group to Create Group”
Write-Host ” ”
Write-Host “EX: Admins, Managers, SoftwareGroup”
Write-Host ” ”
$groupName=Read-Host “GroupName”

cls
Write-Host ” ”
Write-Host “Please enter the CONDITION of Dynamic Security Group ”
Write-Host ” ”
Write-Host “For Group of Users whoose Job Title equals Master Enter:(title=Master)”
Write-Host “For Group of Users whoose Job Title starts with Master Enter:(title=*Master)”
Write-Host “For Group of Users whoose Job Title ends with Master Enter:(title=Master*)”
Write-Host ” ”
Write-Host “For Group of Users whoose department equals System AND Job title contains admin Enter:(&(department=System)(title=*admin*))”
Write-Host ” ”
Write-Host “For Group of Users whoose department equals System OR Job title ends with user Enter:(|(department=System)(title=*user))”
Write-Host ” ”
$condition=Read-Host “Condition”

cls

Write-Host “You are about to creat DSG with name $groupName and with condition $condition”
Write-Host ” ”
Write-Host “Do you want to continue?”
Write-Host ” ”
$Answer=Read-Host “Y/N”

if(($Answer -eq “Y”) -or($Answer -eq “y”))
{
New-ADGroup -Name “$groupName” -Path “OU=Dynamic Security Groups,$domainDN” -Description “Dynamic Security Group (Managing By System) Condition is $condition” -GroupScope Global
}
else
{
Write-Host “Dynamic Security Group Creation Process is Cancelled”
}
_________________________________________________________________________
DSG_Manager.ps1
_________________________________________________________________________
cls
$dsgOU=”OU=Dynamic Security Groups”
$domainDN=”DC=akd,DC=local”

$dsgs = Get-ADGroup -SearchBase “$dsgOU,$domainDN” -Filter * -Properties description
foreach($dsg in $dsgs)
{
$text = $dsg.description
$groupName=$dsg.Name
$condition=$text.Substring($text.IndexOf(“Condition is”)+13)

$users = Get-ADUser -LDAPFilter “((objectCategory=user)(objectClass=user)$condition)”
$Groupusers = Get-ADGroupMember $groupName

foreach($Groupuser in $Groupusers)
{
$flag=$false
foreach($user in $users)
{

if($Groupuser.DistinguishedName -eq $user.DistinguishedName)
{
$flag=$true
}

}
if($flag -eq $false)
{
Remove-ADGroupMember -Identity $groupName -members $Groupuser -Confirm:$false
}
}
Add-ADGroupMember -Identity $groupName -Members $users
}
_________________________________________________________________________

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