Weboldal keresés

PowerShell: Értesítést kérek, ha valakit felvesznek a rendszergazdai csoportba


Kapsz értesítést, ha változások lesznek a csoporttagságban? Nem? A csoportos tagság különösen érdekes. Főleg, ha a domain rendszergazdák csoportjáról van szó. A következő cikk bemutatja, hogyan lehet felismerni a változásokat, majd rendszeres időközönként ellenőrizni őket. Minden változásról értesíteni kell az adminisztrátort. Ezt megteheti üzenetben vagy e-mailben. Az ellenőrzési házirendek konfigurálása helyett mindent a PowerShellben végzünk, majd a szkriptünket egy ütemezett feladatba helyezzük.

A cél

A következőket szeretnénk elérni.

Ha a Domain Admins Group tagságában változás történik, értesítsen e-mailben vagy üzenetben, vagy bármi mással. Így nézhet ki:

Vagy ez:

Bevezetés

Először le kell kérnünk a Domain Admin csoport összes tagját.

Get-ADGroupMember -Identity "Domain Admins").Name

Alternatív megoldásként elmenthetjük egy Admins.txt fájlba:

(Get-ADGroupMember -Identity "Domain Admins").Name | Out-File C:\Temp\Admins.txt

Most hozzáadok egy új felhasználót a csoporthoz. Arnold Schwarzenbergnek hívják. A híres személyekkel való hasonlóságok pusztán véletlenek. ?

Ezután elmentem az eredményt egy másik Admins2.txt fájlba

(Get-ADGroupMember -Identity "Domain Admins").Name | Out-File C:\Temp\Admins2.txt

Most nézzük meg mindkét fájlt.

Következő lépésünk a két fájl tartalmának összehasonlítása. Ehhez a Compare-Object-et használom.

$a=Get-Content C:\Temp\Admins.txt
$b=Get-Content C:\Temp\Admins2.txt
$differ=Compare-Object -ReferenceObject $a -DifferenceObject $b | Select-Object -ExpandProperty InputObject

Bírság. Megkaptuk őt!

Egy másik módszer a csoporttagok elmentése egy változóba. Ez a kedvenc módszerem. Nem szeretem ezeket a szöveges fájlokat ?

$ref=(Get-ADGroupMember -Identity "Domain Admins").Name
$diff=(Get-ADGroupMember -Identity "Domain Admins").Name

Hozzon létre egy szkriptet a tagság rendszeres összehasonlításához naponta egyszer

Nyissa meg a PowerShell ISE-t. Állítsuk össze az egészet egy forgatókönyvben. Az első szkript üzenetet kezdeményez a rendszergazda asztalán. Ellenőrzi a tagokat, majd körülbelül egy órát vár. Ezután a szkript újra ellenőrzi, és összehasonlítja az eredményt. Most a SideIndicator-t használjuk. Ez a jelző akkor lehet hasznos, ha csak egy irányban szeretné lekérdezni az értékek változásait. Az érvényes értékek: => és <=

$ref=(Get-ADGroupMember -Identity "Domain Admins").Name
Start-Sleep -Seconds 86398
$diff=(Get-ADGroupMember -Identity "Domain Admins").Name
$result=(Compare-Object -ReferenceObject $ref -DifferenceObject $diff | Where-Object {$_.SideIndicator -eq "=>"} | Select-Object -ExpandProperty InputObject) -join ", "
If ($result)
{msg * "The following user was added to the Domain Admins Group: $result"}

A második figyelmeztető e-mailt küld.

$ref=(Get-ADGroupMember -Identity "Domain Admins").Name
Start-Sleep -Seconds 86398
$diff=(Get-ADGroupMember -Identity "Domain Admins").Name
$date=Get-Date -Format F
$result=(Compare-Object -ReferenceObject $ref -DifferenceObject $diff | Where-Object {$_.SideIndicator -eq "=>"} | Select-Object -ExpandProperty InputObject) -join ", "
If ($result)
{Send-MailMessage -From SecurityAlert@domain.com -To p.gruenauer@domain.com -SmtpServer EX01 -Subject "Domain Admin Membership Changes | $result was added to the Group" -Body "This alert was generated at $date" -Priority High}

Jegyezze meg az utolsó sort. Ezeket az értékeket ki kell töltenie. Győződjön meg arról, hogy a levelezőszerver elfogadja a számítógépéről érkező e-maileket.

A teszt

A teszteléshez leegyszerűsítettem a szkriptet, és csak 20 másodpercre alvó állapotba küldtem a PowerShellt. Ebben az időszakban gyorsan hozzáadok egy felhasználót a domain rendszergazdák csoportjához. Ez stresszes volt ?

Megint nálunk van!

Most mentse a szkriptet PowerShell-fájlként. (ps1)

Helyezze be egy ütemezett feladatba

Nem számít, melyik értesítést részesíti előnyben, az egészet egy ütemezett feladatba kell helyeznie, amely például 60 percenként fut. Nézze meg az argumentumot az első sorban (a szkript helye), a RepititionInterval-t a második sorban és a UserId-t a 4. sorban. Módosítania kell ezeket az értékeket, különösen a UserId-t.

$Action=New-ScheduledTaskAction -Execute "powershell" -Argument "C:\Alerts\domain_admins.ps1"
$Trigger=New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Seconds 86400) -RepetitionDuration ([timespan]::MaxValue)
$Set=New-ScheduledTaskSettingsSet
$Principal=New-ScheduledTaskPrincipal -UserId "sid-500\administrator" -LogonType S4U
$Task=New-ScheduledTask -Action $Action -Trigger $Trigger -Settings $Set -Principal $Principal
Register-ScheduledTask -TaskName "Domain Admins Check" -InputObject $Task -Force

Hozzon létre egy szkriptet egy alapvonal alapján

A fenti módszer hátránya, hogy napi 2 másodperces időintervallumunk van.

Ha az adminisztrátori csoporttagság nagyon ritkán változik, javaslom egy alapvonal létrehozását. Először mentse az alapvonalat egy fájlba.

 (Get-ADGroupMember -Identity "Domain Admins").Name | Out-File C:\Temp\Admins.txt 

Ezután hozzon létre egy szkriptet, amely összehasonlítja a csoporttagságot az Ön alapértékével.

$base=Get-Content C:\Temp\Admins.txt
$diff=(Get-ADGroupMember -Identity "Domain Admins").Name
$result=(Compare-Object -ReferenceObject $base -DifferenceObject $diff | Where-Object {$_.SideIndicator -eq "=>"} | Select-Object -ExpandProperty InputObject) -join ", "
If ($result)
{msg * "The following user was added to the Domain Admins Group: $result"}

Most helyezze el ezt a szkriptet egy ütemezett feladatba, és futtassa, amikor csak akarja.

Alkalmazkodás

Egy további ötlet két ütemezett feladat létrehozása lenne. (Az egyik a referencia, a második a különbségek miatt). Egy másik lehetőség a naplózás konfigurálása az eseménynapló-előfizetésekkel kombinálva.

Mindenesetre: Használja ki a fent bemutatott ötleteket, és alkalmazza azokat.

Kapcsolódó cikkek