WMI Olaylarıyla Active Directory Değişiklikleri Nasıl İzlenir?
Active Directory birçok kuruluşun kritik bir bileşenidir. Ayrıca sürekli değişen yüzbinlerce nesneyi içermesi de bunaltıcı olabilir. Neyse ki, biraz PowerShell uzmanlığı ve biraz zamanla Active Directory değişikliklerini takip edebilirsiniz.
Bu eğitimde, Active Directory değişikliklerini izlemek ve Active Directory nesnelerinizde neler olup bittiği hakkında bilgi sahibi olmanızı sağlamak için WMI olaylarını nasıl kullanacağınızı öğreneceksiniz!
Önkoşullar
Bu makale uygulamalı bir eğitim olacaktır. Devam etmek istiyorsanız aşağıdakilere sahip olduğunuzdan emin olun:
- Active Directory etki alanı - Bu eğitimde, Active Directory ve orman işlevsel düzeyi 2019 olarak ayarlanmış Windows Server 2019 kullanılacaktır, ancak Windows 2008 R2 veya sonraki bir sürümü çalıştıran etki alanı denetleyicileri (DC'ler) çalışmalıdır. Eğitimde, DC01 ve DC02 olmak üzere iki DC'ye sahip test.local adlı bir alan adı kullanılacaktır.
- PowerShell yüklü, etki alanına katılmış bir Windows bilgisayarı. Bu eğitimde Windows PowerShell v5.1 veya PowerShell 7 ile Windows 10 kullanılacaktır.
- PowerShell Aktif Dizin Modülü.
- Etki alanındaki Etki Alanı Yöneticileri gruplarının üyesi olan bir kullanıcı hesabı.
WMI ile Active Directory Gruplarını Bulma
Active Directory'de bir nesne değiştiğinde bildirim alabilmeniz için öncelikle WMI olayının görüneceği WMI sınıfını bilmeniz ve grup üyelerini sorgulamanız gerekir. Bunu yapmak için DC'de:
1. PowerShell'i açın.
2. Ad alanına bağlanmak ve ad alanındaki mevcut tüm sınıfları bulmak için Get-CimClass'ı çalıştırın. CimClassName sütununda bir ds_group göreceksiniz. Bu sınıf, Active Directory'deki tüm grupları ve bunların niteliklerini listeler.
Get-CimClass -Namespace 'ROOT\Directory\LDAP'3. Şimdi, her grubun cn özelliğini döndürecek ds_group sınıfının tüm örneklerini bulmak için Get-CimInstance'ı çalıştırın.
Get-CimInstance -Namespace 'root\directory\ldap' -ClassName ds_group | Select-Object -Property DS_cnWMI Olay Aboneliği Oluşturma
Artık grupları WMI'da nerede bulacağınızı bildiğinize göre bir sonraki adım, bu WMI örneklerindeki değişiklikleri "dinlemek" için bir WMI olay aboneliği ayarlamaktır. Belirli bir olayı izlemek için (Active Directory grubundaki bir değişiklik gibi), WMI olayına abone olmanız gerekir.
Oluşturma, kaldırma ve değiştirme olaylarından birçok farklı türde WMI olayına abone olabilirsiniz. Bu durumda bir CIM örneğinin (AD grubu) ne zaman değiştirildiğini bilmeniz gerekir. Bu durumda, CIM_InstModification adlı bir sınıf kullanırsınız. CIM_InstModification sınıfı, herhangi bir CIM örneğini değişikliklere karşı izler.
WQL Sorgusunu Geliştirin
WMI olay aboneliğini ayarlamak için öncelikle bir WQL sorgusu geliştirmelisiniz. WQL, WMI örneklerini SQL benzeri bir sözdiziminde bulmanızı sağlayan, WMI'ya özel basit bir dildir. Bu örnekte aradığınız sorgu aşağıdaki örneğe benzemektedir.
Aşağıdaki WQL sorgusu, DS_group adıyla eşleşen örnekleri değiştiren tüm olayları arayacaktır. Ayrıca in operatörünü de fark edeceksiniz. Bu operatör, Windows'a her 10 saniyede bir yeni olayları kontrol etmesini söyleyen yoklama aralığıdır.
Select * from CIM_InstModification within 10 where TargetInstance ISA 'DS_group'Ayrıca, WQL ifadenizin sonuna
AND TargetInstance.ds_cn='Enterprise Admins'eklemek gibi daha fazla koşul ekleyerek belirli AD gruplarındaki değişiklikleri sorgulayabilirsiniz.
PowerShell'de WMI Aboneliğini Oluşturun
Artık WQL sorgusunu oluşturduğunuza göre bir sonraki adım PowerShell'e girip onu etkinliğe abone olmak için kullanmaktır. Bunu yapmak için:
1. Etki alanı denetleyicisinde PowerShell'i açın.
2. Az önce bulduğunuz sorguyu değer olarak atayan $query adında bir değişken oluşturun.
$query = "Select * from CIM_InstModification within 10 where TargetInstance ISA 'DS_group'"3. Register-CimIndicationEvent cmdlet'ini kullanarak aboneliği oluşturmak (etkinliği kaydetmek) için bu sorguyu kullanın. Aşağıdaki komut, sonuçları yalnızca ROOT\directory\LDAP ad alanı içindeki DS_Group değişiklik olaylarıyla sınırlamak için sorguyu kullanarak GroupMonitoring adlı bir WMI aboneliğini kaydeder.
Register-CimIndicationEvent -Query $query -SourceIdentifier 'GroupMonitoring' -MessageData 'Group Info Changed' -Namespace 'ROOT\directory\LDAP'
Register-CimIndicationEventgeçici bir WMI olayı aboneliği oluşturur. PowerShell konsolunu kapattığınızda abonelik artık etkin olmayacaktır. AD gruplarını uzun vadede izlemek için kalıcı bir etkinlik aboneliği kullanın.
4. Şimdi, aşağıdakine benzer bir nesne döndürecek Get-EventSubscriber komutunu çalıştırarak bir aboneliği başarıyla kaydettirdiğinizi onaylayın.
WMI Olaylarını Okuma
Windows artık tüm Active Directory gruplarındaki tüm değişiklik olaylarını izliyor olmalıdır. Bunu test etmek için şimdi bir gruba üye ekleyelim ve ne olacağını görelim.
Hala DC'de PowerShell'de olduğunuzu varsayarsak:
1. Enterprise Admins grubuna bir kullanıcı eklemek için Add-ADGroupMember cmdlet'ini çalıştırın. Aşağıdaki örnek, Kullanıcı2 adında bir kullanıcı hesabının eklenmesidir.
Yaklaşık 10 saniye sonra, olayın daha erken bir abonelik ayarlamanızı tetiklemesi gerekirdi.
Add-ADGroupMember -Identity 'Enterprise Admins' -Members User2
2. Etkinliği bulmak için Get-Event cmdlet'ini çalıştırarak yeni kaydedilen tüm etkinlikleri arayın. Her şey yolunda giderse, aşağıdaki ekran görüntüsüne benzer bir çıktı görmelisiniz. Ekran görüntüsünde SourceInstance, nesne özelliğinin geçerli değeridir. ÖncekiInstance değeri, nesne özelliğinin önceki değeridir.
(Get-Event).SourceEventArgs.newevent3. Şimdi sonucu daraltın ve aşağıda gösterildiği gibi yalnızca mevcut uyarı değerlerini görüntüleyin. Artık Kurumsal Yöneticiler grubunda grup üyelerinin geçerli listesini göreceksiniz.
(Get-Event).SourceEventArgs.newevent.SourceInstance | Select-Object -Property ds_memberDeğeri değişiklik gerçekleşmeden önceki almak istiyorsanız, aşağıda gösterildiği gibi ÖncekiInstance nesnesinin DS_Member özelliğine bakın.
(Get-Event).SourceEventArgs.newevent.PreviousInstance | select DS_memberÇözüm
Artık Active Directory değişikliklerini izlemek için WMI olay aboneliğini nasıl ayarlayacağınızı bildiğinize göre, bu PowerShell kodunu alıp ondan bir izleme betiği oluşturabilirsiniz.
Şimdi bu olayları New-WinEvent cmdlet'iyle Windows olay günlüğüne kaydederek veya Send-MailMessage ile bir e-posta göndererek bir izleme aracı oluşturup oluşturamayacağınızı görün!





