Quick & Dirty: Active Directory Gruppe auf Mitglieder überwachen

Der folgende Fall ist sicherlich nicht ganz alltäglich: Es ging darum eine Active Directory Gruppe auf bestimmte Mitglieder hin zu überwachen. Nur ganz bestimmte Benutzerkonten sollten in dieser Gruppe vorhanden sein, alle zusätzlichen oder entfernten Mitglieder sollten gemeldet werden.

Auf die Schnelle habe ich dazu ein kleines PowerShell Script erstellt, in welchem die Benutzer angegeben werden, die in der Active Directory Gruppe sein sollen. Abweichungen von der konfigurierten Liste, werden per Mail gemeldet. Falls jemand ähnliches gebrauchen kann, hier ist mein Ansatz:

$ADGroup = "MyADGroup"
$AllowedMembers = @(
    'User1'
    'User2'
    'User3'
	)
$SmtpServer = "smtp.frankysweb.local"
$From = "GroupWarning@frankysweb.de"
$To = "frank@frankysweb.de"
$Subject = "Warning"

#import AD-Module
 Import-Module ActiveDirectory
	
#fetch Groupmember from AD
 $ADGroupMembers = Get-ADGroup $ADGroup | Get-ADGroupMember -Recursive | select SamAccountName,name

#compare groupmembers with allowedmembers
 $Difference = Compare-Object -ReferenceObject $ADGroupMembers.SamAccountName -DifferenceObject $AllowedMembers
  if ($Difference)
   {
    #User allowed, but not member of the group
     $NotGroupMember = ($Difference | where {$_.SideIndicator -eq "=>"}).InputObject
  
    #User is member of the group, but not allowed
     $NotAllowedMember = ($Difference | where {$_.SideIndicator -eq "<="}).InputObject
  
    #Build mail
     $Mail = "
			 User is not allowed to be member of the group $ADGroup :
			 $NotAllowedMember

			 User is allowed to be member of the group $ADGroup, but isn't member:
			 $NotGroupMember
			 "
	
	#Send mail
	 Send-MailMessage -SmtpServer $SmtpServer -From $From -To $To -Body $Mail -BodyAsHtml -Subject $Subject
 }

Das Script wurde dann einfach jede Stunde als Aufgabe gestartet. Vielleicht kann ja jemand damit etwas anfangen und es für sich nutzen / abwandeln. Ein vernünftiges Auditing lässt sich damit selbstverständlich nicht ersetzen, hier geht es einfach nur um eine kurze Mail, wenn die Mitglieder einer Gruppe nicht mehr passen. So in etwa sieht dann die Mail aus:

Active Directory Gruppe

3 thoughts on “Quick & Dirty: Active Directory Gruppe auf Mitglieder überwachen”

  1. Danke für das Skript. Genau so etwas habe ich gesucht. Hier noch eine kleine Verbesserung:

    Send-MailMessage -SmtpServer $SmtpServer -From $From -To $To -Body $Mail -BodyAsHtml -Subject $Subject -Encoding ([System.Text.Encoding]::UTF8)

    Dann klappt es auch mit den Umlauten.

    Reply
  2. Danke, echt nützlich.
    Ich möchte nicht wissen, wie viele Unternehmen externe Dienstleister dauernd in der Gruppe Domain-Admins halten, obwohl das gar nicht nötig ist. (zumindest nicht dauernd).
    Lg
    P

    Reply
  3. Hi Frank,

    habs grad ausprobiert und er meldet mir etwas falsches per Mail.
    Beispiel: Bei „AllowedMembers“ habe ich „UserX“ eingetragen – dieser ist aktuell auch das einzige Mitglied der Gruppe „Group123“.
    Ich füge nun „UserY“ zur Gruppe zusätzlich dazu und lasse das Script laufen.

    Ich bekomme eine Mail mit folgendem Inhalt:
    „User is not allowed to be member of the group Group123 : UserY User is allowed to be member of the group Group123, but isn’t member: „

    Reply

Leave a Comment