# =============================================================================
# Script Name: Send-ADGroupChangeAlert.ps1
# Author: Elif Uçhan
# Date: 2024-05-22
# Description: This script detects Active Directory group membership changes
# (Event ID 4728) and sends an HTML formatted email alert to specified recipients.
# =============================================================================
Clear-Host
# ========================
# Collection Data Section
# ========================
Function EventID-To-HTML($ComputerName = $env:COMPUTERNAME)
{
# Define the target groups
$targetGroups = @(
"Administrators",
"Domain Admins",
"Organization Management",
"Enterprise Admins",
"Group Policy Creator Owners",
"Protected Users",
"Schema Admins"
)
# Initialize HTML content
$htmlContent = ""
# Iterate through the target groups
foreach ($group in $targetGroups) {
# Get members added to the group
$membersAdded = Get-ADGroupMember -Identity $group | Where-Object { $_.ObjectClass -eq "User" } | Select-Object -ExpandProperty SamAccountName
# If members are added to the group
if ($membersAdded) {
# Construct HTML content
$membersList = $membersAdded -join "<br>"
$htmlContent += "<li style='background-color: #fff; color: #5a666b; padding: 10px; margin-bottom: 5px;'><b>${group}:</b> </br> $membersList</li>"
}
else {
# If no members added to the group
$htmlContent += "<li style='background-color: #fff; color: #5a666b; padding: 10px; margin-bottom: 5px;'><b>${group}:</b> </br> No new users added</li>"
}
}
# Construct HTML start code
$htmlStart = @"
<html>
<head>
<style>
body {
background-color: #5a666b;
font-family: Arial, sans-serif;
color: #333;
margin: 0;
padding: 0;
}
.container {
width: 80%;
margin: 20px auto;
}
h2 {
color: #c1dae6;
}
p {
margin-bottom: 10px;
}
ul {
list-style-type: none;
padding: 0;
margin: 0;
}
.alert {
background-color: #f8d7da;
border-color: #f5c6cb;
color: #721c24;
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: .25rem;
}
.alert-danger {
background-color: #f8d7da;
border-color: #f5c6cb;
color: #721c24;
}
.alert-danger h2 {
color: #721c24;
}
</style>
</head>
<body>
<div class="container">
<div class="alert alert-danger">
<h2>System Security Alert: <span>User Account Added</span></h2>
<p><b>Event Occurred On:</b> <span>$(Get-Date) on $ComputerName</span></p>
<div class="event-details">
<p><b>Domain Groups with New Users:</b></p>
<ul>
$htmlContent
</ul>
</div>
<p><i>This report is automatically generated. Please do not reply.</i></p>
</div>
</div>
</body>
</html>
"@
return $htmlStart
}
# ======================
# Sending Email Section
# ======================
# Define email parameters
$From = "GroupChange@test.local"
$To = "admin@test.local"
$Subject = "*** Active Directory Group Membership Change ***"
$SMTPServer = "exc01.test.local"
# Generate HTML body
$htmlBody = EventID-To-HTML
# Create email message
$objEmailMessage = New-Object system.net.mail.mailmessage
$objEmailMessage.From = $From
$objEmailMessage.To.Add($To)
$objEmailMessage.Subject = $Subject
$objEmailMessage.IsBodyHTML = $true
$objEmailMessage.Body = $htmlBody
# Create SMTP client and send email
$objSMTP = New-Object Net.Mail.SmtpClient($SMTPServer)
$objSMTP.Send($objEmailMessage)

Betik şu temel adımları izler:
Bu betik, güvenlik ekipleri için otomatik izleme ve uyarı sistemleri oluşturmanın bir örneğidir. Bu tür betikler, sistemdeki önemli değişiklikleri anında tespit etmek ve uygun müdahaleleri yapmak için çok değerli bir araç olabilir.
Eğer bu betiği kullanarak kendi sistemlerinizde güvenliği artırmak istiyorsanız, kendi ortamınıza uygun şekilde uyarlayıp planlayıcıya (task scheduler) entegre edebilirsiniz