Powershell: Active Directory Gruppe Monitoren

Wie oft ist es schon passiert, dass sich Administratoren die Frage stellen, seit wann ein Account, eine Gruppe, effektive eine Person(engruppe) die Vorzüge oder Einschränkungen hinter einer Active Directory Security Group bekommt.

Nun dafür gibt es eine einfache Lösung:

Import-Module ActiveDirectory
#Variables
#Variable for AD group to be checked
$CheckGroup = 'Group-Name die überwacht werden soll'
$Folder = 'c:\temp\'
$BasePath = $Folder + 'base.txt'
$CompPath = $Folder + 'comp.txt'
#Variable for comparison base
[IO.File]::ReadAllText("C:\temp\base.txt") -replace '\s+\r\n+', "`r`n" | Out-File "C:\temp\base.txt"
$BaseList = get-content C:\temp\base.txt
#variable for change date of AD group
$ChangeDate = (Get-ADGroup -Identity $CheckGroup -Properties *).whenChanged
#variables for email options
$SMTPServerA = "SMTP Server"
$Sender = 'Absender'
$Receipient = 'Empfänger'
#Variable for comparison output
[System.Collections.ArrayList]$output = @()

#create comparison list
(Get-ADGroupMember -Identity $CheckGroup).Name | Out-File c:\temp\comp.txt

#variable for list to compare with base
[IO.File]::ReadAllText("C:\temp\comp.txt") -replace '\s+\r\n+', "`r`n" | Out-File "C:\temp\comp.txt"
$CompList = get-content C:\temp\comp.txt

$Members = Compare-Object -ReferenceObject $BaseList -DifferenceObject $CompList -IncludeEqual

foreach ($Member in $Members)
{
    switch ($Member.SideIndicator)
	{
		'<='
		{
			if ($Member.InputObjet -ne '')
			{
				$result = $Member.InputObject + " has been removed"
				$output.add($result)
			}
		}
		'=>'
		{
			if ($Member.InputObjet -ne '')
			{
				$result = $Member.InputObject + " has been added"
				$output.add($result)
			}
		}
		'=='
		{
		}
	}
}
#Send Email if list changed
If ($output.count -gt 0)
{
	Send-MailMessage -From $Sender -to $Receipient -Subject "Change on Group-Name recognised" -SmtpServer $SMTPServerA -Body "$output</br>'Last ChangeDate: '$ChangeDate" -Priority High -BodyAsHtml
}
#remove baselist
If (Test-Path $BasePath)
{
	Remove-Item $BasePath
}
#make complist new baselist
If (Test-Path $CompPath)
{
	Rename-Item -Path $CompPath -NewName 'base.txt'
}

Dieses Skript als „Scheduled Task“ kann schon Licht ins Dunkle bringen.
Klar, es wird noch nicht geklärt, wer die Änderung gemacht hat.

Das ist eine ganz andere Geschichte.

Facebooktwittergoogle_plus
Facebooktwittergoogle_plus

Schreiben Sie einen Kommentar

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

*

Cookies help us deliver our services. By using our services, you agree to our use of cookies. More Info | Close
%d Bloggern gefällt das: