Active Directory Günlük Aramasını PowerShell ile Ölçeklendirme
Yakın zamanda PowerShell kullanarak Active Directory'nizdeki değişiklikleri nasıl bulacağınıza dair bir gösteri yayınladım. Bu işlem, tüm etki alanı denetleyicilerinizde Güvenlik olay günlüğünü aramanızı gerektirir. Ben de dahil olmak üzere birkaç kişinin belirttiği gibi, bunun geniş ortamlarda çok iyi ölçeklenememe potansiyeli var. Hala geniş bir Active Directory altyapınız varsa profesyonel ve kurumsal düzeyde yönetim araçları aramanız gerektiğine inanıyorum. PowerShell, boşlukları doldurmak veya anlık işler için iyidir.
Ancak arama fonksiyonumu ölçeklendirmenin bir yolu var; bu da PowerShell 7.x kullanmak ve ForEach-Object ile paralel işlemenin avantajlarından yararlanmaktır. Bunun bu özellik için harika bir kullanım örneği olduğunu düşünüyorum. Çalışma alanlarının döndürülmesiyle ilgili ek yük vardır, bu nedenle görevin masrafı karşıladığından emin olmanız gerekir. Bu durumda öyle olduğunu düşünüyorum. Çok fazla etki alanı denetleyicisini sorgulamıyor olsanız da günlük dosyaları büyük olabilir. Kuşkusuz sınırlı testlerim bunu doğruluyor.
Geleneksel Yaklaşım
Get-ADuserAudit fonksiyonumu olduğu gibi kullanacağım. Üzerinde herhangi bir değişiklik yapmıyorum. Birden fazla etki alanı denetleyicisini nasıl sorgulayabileceğim aşağıda açıklanmıştır. Öncelikle bir liste tanımlayacağım.
$dcs = "dom1","dom2","dom1","offline","dom2","dom1"Test etki alanımda yalnızca iki etki alanı denetleyicisi var, bu yüzden onları birkaç kez sorgulayacağım. Başarısız olacağını bildiğim bir ismi de ekledim. Komut dosyasını nokta kaynağına ihtiyacım var.
. C:\scripts\get-adlog.ps1
Ve şimdi çalıştırın. Fonksiyona parametre değerlerinin karma tablosunu gönderiyorum.
$get = @{
DomainController = $dcs
Since = "2/1/2021"
Events = "Created","Deleted","Disabled"
}
$r = Get-ADUserAudit @getKomut yaklaşık 24 saniyede 15 sonuç buldu.
PowerShell 7 Yolu
Şimdi PowerShell 7'ye geçelim. Aynı etki alanı denetleyicileri listesini aşağıdaki gibi kodla kullanacağım:
$r = $dcs | foreach-object -Parallel {
. C:\scripts\get-adlog.ps1
$get = @{
DomainController = $_
Since = "2/1/2021"
Events = "Created","Deleted","Disabled"
}
Get-ADUserAudit @get
}Komut dosyası bloğu, aktarılan her nesne için ayrı bir çalışma alanında çalıştırılır; bu durumda bu, bir etki alanı denetleyicisinin adıdır. Her çalışma alanında, bir modülün parçası olmadığından ve sırasıyla Get-ADUserAudit'e sıçrayan parametre hashtable'ımı tanımladığım için işlevi nokta olarak kaynaklandırıyorum.
Bu ifade aynı sonuçları döndürdü, ancak şimdi yaklaşık 12 saniye içinde. Bir yandan 12'ye 24 saniye o kadar da önemli değil. Ancak bu ölçeğin daha fazla etki alanı denetleyicisi ve daha büyük günlüklerle olmasını beklerdim. O zaman %50'nin gerçekten bir anlamı olabilir. Ayrıca çok sayıda sunucuyla kısıtlamanın avantajlarından da yararlanabilirsiniz. Varsayılan değer olan 5'i kullanıyorum. Gaz kelebeği sınırını ayarlamanın herhangi bir faydası olup olmadığını görmek için test etmeniz gerekecek.
Get-ADUserAudit fonksiyonunu özellikle bu teknikle denerseniz deneyimlerinizi duymak isterim.
