PS: Domänencontroller auf Events überwachen

Moin,

eines der wichtigsten aber auch aufwändigsten Adminaufgaben ist, regelmäßig die Eventlog zu überwachen. Gerade im Domänenumfeld ist das zwar wichtig, aber ohne Drittherstellertools fast unmöglich. Wir haben die Eventlogs dank der „Default Domain Controller Policy“ auf die wichtigsten Failure Events heruntergebrochen und lasse Stündlich einen Job laufen, der eben die gewünschten Events sucht und reported.

Das Reporting soll via Mail an die zuständigen Admins erfolgen, aber auch für eine spätere Suche auf dem ausführenden Server platzsparend zur Verfügung stehen. Wir legen das ganze also als nach Tagen und Event getrennte Textdateien ab. Diese kann man via Standard Windowssuche dann auch hübsch durchsuchen. Die Scriptlaufzeit ist bei 7 Domänencontrollern, teilweise in verschiedenen Städten bei ca 5 Minuten.

Import-Module ActiveDirectory

####Config
$servername = $env:computername
$mailto = „admin1@company.tld“,“admin2@company.tld“,“admin3@company.tld“
$smtpServer = „mailserver.company.tld“
$emailFrom = $servername + „@company.tld“
$mailSubject = „Domain.tld – Domain Monitoring“
$nl = [System.Environment]::NewLine
$audit = „E:\Audit\“
$auditdate = get-date -format yyyyMMdd
###Get all DCs

$dcs = Get-ADDomainController -Filter * | Select-Object -expandproperty name
###Get Eventlogs from all DC with

$securitylog = get-eventlog -Computername $dcs -LogName Security -Newest 200 |where {$_.timegenerated -gt ((get-date).addhours(-1))} | where {$_.Instanceid -eq „5141“ -or $_.InstanceID -eq „4726“ -or $_.InstanceID -eq „4740“}

$systemlog = get-eventlog -Computername $dcs -LogName System -Newest 200 |where {$_.timegenerated -gt ((get-date).addhours(-1))}|where {$_.Instanceid -eq „5722“}

##4740 – Gesperrte Konten
$event4740 = $securitylog | where{$_.instanceid -eq „4740“}

##4726 – Geloeschte Userobjekte
$event4726 = $securitylog | where{$_.instanceid -eq „4726“}

##5141 – Geloeschte GPO
$event5141 = $securitylog | where{$_.instanceid -eq „5141“}

##5722 – Computer ohne gueltiges Kerberos
$event5722 = $systemlog | where{$_.instanceid -eq „5722“}
###format and send mail

$event5722format = $event5722 | Select-Object @{Name=“Zeitpunkt“;Expression={$_.TimeWritten}},@{Name=“Computername“;Expression={$_.ReplacementStrings[0]}}, @{Name=“Domaenencontroller“;Expression={$_.PSComputerName}}

$event5141format = $event5141 | Select-Object @{Name=“Zeitpunkt“;Expression={$_.TimeWritten}},@{Name=“Geloeschte GPO“;Expression={$_.ReplacementStrings[10]}}, @{Name=“Objektdetails“;Expression={$_.ReplacementStrings[8]}},@{Name=“Geloescht von“;Expression={ $_.ReplacementStrings[3]}}, @{Name=“Domaenencontroller“;Expression={$_.PSComputerName}}

$event4740format = $event4740 | Select-Object @{Name=“Zeitpunkt“;Expression={$_.TimeWritten}},@{Name=“Gesperrtes Konto“;Expression={$_.ReplacementStrings[0]}}, @{Name=“Quellrechner“;Expression={ $_.ReplacementStrings[1]}}, @{Name=“Domaenencontroller“;Expression={ $_.ReplacementStrings[4]}}

$event4726format = $event4726 | Select-Object @{Name=“Zeitpunkt“;Expression={$_.TimeWritten}},@{Name=“Geloeschtes Konto“;Expression={$_.ReplacementStrings[0]}}, @{Name=“Geloescht von „;Expression={ $_.ReplacementStrings[4]}}

####Send only Mail when something to report

if($event5722format)
{ $body += „Folgende Computer haben die Verbindung verloren “ + $nl + ($event5722format| out-string)
$auditpath = $audit + $auditdate + „_Verlorene_Verbindungen.txt“
($event5522format | out-string) >> $auditpath}

if($event5141format)
{ $body += „Folgende Objekte wurden geloescht “ + $nl + ($event5141format| out-string)
$auditpath = $audit + $auditdate + „_Geloeschte_Objekte.txt“
($event5141format | out-string) >> $auditpath}

if($event4740format)
{ $body += „Folgende Konten wurden gesperrt “ + $nl + ($event4740format | out-string)
$auditpath = $audit + $auditdate + „_Gesperrte_Konten.txt“
($event4740format | out-string) >>$auditpath}

if($event4726format)
{ $body += „Folgende Konten wurden geloescht “ + $nl + ($event4726format | out-string)
$auditpath = $audit + $auditdate + „_Geloeschte_Konten.txt“
($event4726format | out-string) >>$auditpath}

$body

if ($body) {

Send-MailMessage -to $mailto -Subject $mailSubject -Body $body -Smtpserver $smtpServer -from $emailFrom

}

Fragen? Anregungen? Wünsche? 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.