El resultado es similar pero el código es bastante diferente.
La finalidad del post es que nuestro script esté atento si alguno de nuestros grupos críticos de nuestro AD ha sido alterado, avisándonos mediante un email. Básicamente compara si se ha quitado o añadido algún miembro en los grupos que monitoricemos.
Lo que explicaré aquí será unas modificaciones un script que he encontrado en
Monitorizará los cambios de todos los grupos que pongamos en la variable [Array]$strCriticalGroups.
[Array]$strCriticalGroups = "Admins. del dominio","Controladores de dominio"
El script original es
# Active Directory Group Notification Reporting Script
# Author: Andy Grogan
# www.telnetport25.com
# Credits: sendMail function based upon code from the
# Windows PowerShell Team:
# http://blogs.msdn.com/b/powershell/archive/2009/10/30/sending-automated-emails-with-send-mailmessage-convertto-html-and-the-powershellpack-s-taskscheduler-module.aspx
$ADWSDC = "prod-dc-01"
$SMTPServer = "172.31.253.140"
$MessageFrom = "infoSec@prepad.local"
$MessageTo = "administrator@prepad.local"
Import-Module ActiveDirectory
[Array]$strCriticalGroups = "Enterprise Admins","Domain Admins","Exchange Servers"
function sendMail($strBody){
$ErrorActionPreference = "Stop"
try {
$messageParameters = @{
Subject = "Domain Group Notification Report Update"
Body = $strBody
From = $MessageFrom
To = $MessageTo
SmtpServer = $SMTPServer
}
Send-MailMessage @messageParameters -BodyAsHtml
} catch {
$_ |
Out-File x:\grpMonSMTPerr.txt -Append -Width 1000
}
}
$messBody += "<p>Please find enclosed your Group Monitoring Report: </p>"
foreach($grp in $strCriticalGroups){
$GroupMembers = Get-ADGroupMember $grp -Server $ADWSDC
$messBody += "<h1>" + $grp + "</h1>" + "<br>"
foreach($member in $GroupMembers){
$messBody += $member.Name + "<br>"
}
}
sendMail $messBody
En mi adaptación se añade lo siguiente:- Solo enviará email si hay cambios con la última ejecución del script.
- Adjuntará 3 ficheros al email con los resultados de la última ejecución, la penúltima ejecución y la diferencia.
La adaptación que he propuesto:
#Nuestro Controlador de Dominio
$ADWSDC = "mi_dc01"
$SMTPServer = "191.126.226.9"
$MessageFrom = "Micuenta@midominio.local"
$MessageTo = "destinatario@sudominio.com"
$messBody = ""
Import-Module ActiveDirectory
#Grupos que nos interesa monitorizar
[Array]$strCriticalGroups = "Admins. del dominio","Controladores de dominio"
function sendMail($strBody){
$ErrorActionPreference = "Stop"
try {
$messageParameters = @{
Subject = "AD. Modificacion de Grupos administrativos de AD"
Body = $strBody
From = $MessageFrom
To = $MessageTo
SmtpServer = $SMTPServer
Attachments = $FileResult,$FileToday, $FileYesterday
}
Send-MailMessage @messageParameters -BodyAsHtml
} catch {
$_ |
Out-File c:\grpMonSMTPerr.txt -Width 1000
}
}
$messBody += "<p>Please find enclosed your Group Monitoring Report: </p>"
foreach($grp in $strCriticalGroups){
$GroupMembers = Get-ADGroupMember $grp -Server $ADWSDC
$messBody += "<h1>" + $grp + "</h1>" + "<br>"
foreach($member in $GroupMembers){
$messBody += $member.Name + "<br>"
}
}
#Localización de carpeta y ficheros de trabajo
$FileYesterday = "C:\Script\Control grupos\_FileYesterday.txt"
$FileToday = "C:\Script\Control grupos\_FileToday.txt"
$FileResult = "C:\Script\Control grupos\_FileResult.txt"
#Copia el fichero de ayer que esta en FileToday al nuevo nombre con el que trabajar FileYesterday
if (Test-Path $FileToday) {
if (Test-Path $FileYesterday ) { del $FileYesterday }
copy $FileToday $FileYesterday
#borrarmos el fichero que el que hoy trabajaremos
del $FileToday
}
else
{
# Es la primra ejecución no tenemos datos, creamos el fichero FileYerterday vacio para luego poder comparar.
$messBody | Out-File $FileYesterday
}
#Guarda la información de hoy en el fichero FileToday
$messBody | Out-File $FileToday
#compara el dia anterior con hoy
compare-object (get-content $FileToday) (get-content $FileYesterday) | Format-List | Out-File $FileResult -width 1000
#si el resultado de la comparacion genera un fichero superior a 0.2kb envia email
if( (get-item $FileResult).length -gt 0.2KB) { sendMail $messBody }
La salida en el cuerpo del email sería algo parecido a:
El fichero adjunto de diferencias será algo así:
GoN Jul2016
No hay comentarios:
Publicar un comentario