Az Active Directory változásainak nyomon követése WMI-eseményekkel
Az Active Directory számos szervezet kritikus összetevője. Az is elsöprő lehet, hogy több százezer objektumot tartalmaz folyamatosan, amelyek folyamatosan változnak. Szerencsére némi PowerShell-szakértelemmel és egy kis idővel nyomon követheti az Active Directory változásait.
Ebben az oktatóanyagban megtudhatja, hogyan használhatja a WMI-eseményeket az Active Directory változásainak nyomon követésére, és folyamatosan tájékozott az Active Directory-objektumokkal kapcsolatos eseményekről!
Előfeltételek
Ez a cikk egy gyakorlati oktatóanyag lesz. Ha követni szeretné, győződjön meg arról, hogy rendelkezik az alábbiakkal:
- Active Directory tartomány - Ez az oktatóanyag a Windows Server 2019 rendszert fogja használni 2019-re beállított Active Directory és erdő működési szintjével, de a Windows 2008 R2 vagy újabb rendszert futtató tartományvezérlőknek (DC) működniük kell. Az oktatóanyag a test.local nevű tartományt fogja használni, két DC-vel, DC01 és DC02.
- Egy tartományhoz csatlakoztatott Windows PC, amelyen PowerShell van telepítve. Ez az oktatóanyag a Windows 10 rendszert használja a Windows PowerShell v5.1 vagy a PowerShell 7 rendszerrel.
- PowerShell Active Directory modul.
- Felhasználói fiók a tartományban a Domain Admins csoportok tagjaként.
Active Directory csoportok keresése WMI segítségével
Mielőtt értesítést kaphat egy objektum változásáról az Active Directoryban, először ismernie kell a WMI-osztályt, amelyben a WMI-esemény megjelenik, és le kell kérdeznie a csoport tagjait. Ehhez DC-n:
1. Nyissa meg a PowerShellt.
2. Futtassa a Get-CimClass parancsot, hogy csatlakozzon a névtérhez, és megkeresse az összes elérhető osztályt a névtérben. A CimClassName oszlopban egy ds_group látható. Ez az osztály felsorolja az Active Directory összes csoportját és attribútumait.
Get-CimClass -Namespace 'ROOT\Directory\LDAP'3. Most futtassa a Get-CimInstance parancsot, hogy megkeresse a ds_group osztály összes példányát, amely minden csoport cn tulajdonságát adja vissza.
Get-CimInstance -Namespace 'root\directory\ldap' -ClassName ds_group | Select-Object -Property DS_cnWMI esemény előfizetés létrehozása
Most, hogy tudja, hol találja meg a csoportokat a WMI-ben, a következő lépés egy WMI-esemény-előfizetés beállítása, amely „meghallgatja” a WMI-példányok változásait. Egy adott esemény (például egy Active Directory-csoport változásának) figyeléséhez elő kell fizetnie a WMI-eseményre.
Számos különböző típusú WMI-eseményre feliratkozhat a létrehozástól, eltávolításig és módosításig. Ebben az esetben tudnia kell, hogy egy CIM-példány (AD-csoport) mikor módosul. Ebben az esetben a CIM_InstModification nevű osztályt használja. A CIM_InstModification osztály minden CIM-példányt figyel a módosítások szempontjából.
A WQL lekérdezés fejlesztése
A WMI-esemény-előfizetés beállításához először ki kell fejlesztenie egy WQL-lekérdezést. A WQL egy egyszerű WMI-nyelv, amely lehetővé teszi a WMI-példányok SQL-szerű szintaxisban történő megtalálását. Ebben a példában a keresett lekérdezés az alábbi példához hasonlóan néz ki.
Az alábbi WQL-lekérdezés minden olyan eseményt keres, amely módosítja a DS_group nevének megfelelő példányokat. Észre fogja venni a in belül operátort is. Ez az operátor a lekérdezési intervallum, amely arra utasítja a Windowst, hogy 10 másodpercenként ellenőrizze az új eseményeket.
Select * from CIM_InstModification within 10 where TargetInstance ISA 'DS_group'Adott AD-csoportok módosításait is lekérdezheti, ha további feltételeket ad meg, például hozzáadja az
AND TargetInstance.ds_cn='Enterprise Admins'kifejezést a WQL-utasítás végéhez.
Hozzon létre WMI-előfizetést a PowerShellben
Most, hogy elkészítette a WQL-lekérdezést, a következő lépés az, hogy lépjen be a PowerShellbe, és használja azt az eseményre való feliratkozáshoz. Ehhez:
1. Nyissa meg a PowerShellt a tartományvezérlőn.
2. Hozzon létre egy $query nevű változót, és rendelje hozzá értékként az éppen kitalált lekérdezést.
$query = "Select * from CIM_InstModification within 10 where TargetInstance ISA 'DS_group'"3. Használja ezt a lekérdezést az előfizetés létrehozásához (regisztrálja az eseményt) a Register-CimIndicationEvent parancsmag segítségével. Az alábbi parancs egy GroupMonitoring nevű WMI-előfizetést regisztrál a lekérdezés segítségével, hogy az eredményeket csak a DS_Group módosítási eseményekre korlátozza a ROOT\directory\LDAP névtérben.
Register-CimIndicationEvent -Query $query -SourceIdentifier 'GroupMonitoring' -MessageData 'Group Info Changed' -Namespace 'ROOT\directory\LDAP'A
Register-CimIndicationEventideiglenes WMI-esemény-előfizetést hoz létre. Amikor bezárja a PowerShell-konzolt, az előfizetés többé nem lesz aktív. Használjon állandó esemény-előfizetést az AD-csoportok hosszú távú figyeléséhez.
4. Most erősítse meg, hogy sikeresen regisztrált egy előfizetést a Get-EventSubscriber futtatásával, amely az alábbihoz hasonló objektumot ad vissza.
WMI események olvasása
A Windowsnak most figyelnie kell az összes Active Directory-csoport összes módosítási eseményét. Ennek teszteléséhez adjunk hozzá egy tagot egy csoporthoz, és nézzük meg, mi történik.
Feltéve, hogy még mindig a PowerShellben van a DC-n:
1. Futtassa az Add-ADGroupMember parancsmagot, hogy hozzáadjon egy felhasználót a vállalati rendszergazdák csoporthoz. Az alábbi példa egy Felhasználó2 nevű felhasználói fiók hozzáadása.
Körülbelül 10 másodperc elteltével az eseménynek ki kellett volna indítania, hogy korábban beállítson egy előfizetést.
Add-ADGroupMember -Identity 'Enterprise Admins' -Members User2
2. Az esemény megkereséséhez futtassa a Get-Event parancsmagot az összes újonnan regisztrált esemény megkereséséhez. Ha minden jól megy, akkor az alábbi képernyőképhez hasonló kimenetet kell látnia. A képernyőképen a SourceInstance az objektum attribútum aktuális értéke. A PreviousInstance érték az objektum attribútumának előző értéke.
(Get-Event).SourceEventArgs.newevent3. Most szűkítse le az eredményt, és csak az aktuális riasztási értékeket jelenítse meg az alábbiak szerint. Ekkor megjelenik a csoporttagok jelenlegi listája a Vállalati rendszergazdák csoportban.
(Get-Event).SourceEventArgs.newevent.SourceInstance | Select-Object -Property ds_memberHa a változás bekövetkezte előtti értéket szeretné megkapni, nézze meg a PreviousInstance objektum DS_Member tulajdonságát az alábbiak szerint.
(Get-Event).SourceEventArgs.newevent.PreviousInstance | select DS_memberKövetkeztetés
Most, hogy tudja, hogyan állíthat be egy WMI-esemény-előfizetést az Active Directory változásainak nyomon követésére, használhatja ezt a PowerShell-kódot, és létrehozhat belőle egy megfigyelési parancsfájlt.
Nézze meg, létrehozhat-e megfigyelő eszközt, ha esetleg naplózza ezeket az eseményeket a Windows eseménynaplójába a New-WinEvent parancsmaggal, vagy küldjön egy e-mailt a Send-MailMessage segítségével!





