PowerShell – AD-Gruppen abgleichen

      Kommentare deaktiviert für PowerShell – AD-Gruppen abgleichen

Eigentlich war meine Aufgabe ganz einfach. Es gibt IT-Verantwortliche in jeder Abteilung. Diese werden in eigenen Gruppen verwaltet, da sie dort spezielle Rechte z.B. auf Freigaben haben. Jede Gruppe folgt der Benamung „IT-Manager-<Abteilungsnummer>“ also z.B. „IT-Manager-92“.

Die Aufgabe bestand nun darin, allen IT-Managern E-Mails der IT-Abteilung zukommen zu lassen. Nichts leichter als dass, dachte ich mir und versuchte eine dynamische Distributionsgruppe anzulegen. Dies funktioniert auch wunderbar mit:

New-DynamicDistributionGroup -Name "DynamicGroup IT Manager" -RecipientFilter "(MemberOFGroup -like 'IT-Manager-*')

Wenn man dann aber an diese dynamische Gruppe

(was ja im Prinzip User in Gruppen (z.B. „IT-Mananger-92“) in Dynamischer Gruppe „DynamicGroup IT Manager“ bedeutet)

versucht eine Mail zu schreiben, kommt nur eine Fehlermeldung, dass die Mail nicht zugestellt werden kann. Nach meinen Recherchen scheint es so zu sein, dass das Wildcard Zeichen (*) in der dynamischen Liste, bzw. beim Versenden der E-Mail nicht erlaubt ist.

Da es also so nicht funktioniert, ist die Idee nun eine Gruppe „it_manager“ anzulegen und diese dann per Script aktuell zu halten. Dafür wurde das folgende Script als täglicher Task auf einem AD-Server angelegt.

Set-StrictMode -Version Latest

$ItmanagerGroups = Get-ADGroup -Filter {Name -like "IT-Manager-*"} | Select-Object Name

$ItManager = Get-ADGroup -Filter {Name -eq "it_manager"}|Get-ADGroupMember | Select-Object Name

# vergleiche beide Gruppen
$compareObjects = Compare-Object $ItManager $ItmanagerGroups -Property Name
if ($compareObjects)
{
    foreach ($com in $compareObjects)
    {
        # der SideIndicator gibt an, welche Gruppe, wo fehlt
        # "=>" bedeutet, die Gruppe ist im linken Objekt 
        # aber im rechten nicht vorhanden
        # dementsprechend wird sie hinzugefuegt
        if ('=>' -eq $com.SideIndicator)
        {
            Add-ADGroupMember -Identity "it_manager" -Members $com.Name
        }
        # wenn die Gruppe im "it_manager" steht, aber nicht 
        # mehr vorhanden ist, wird sie entfernt
        if ('<=' -eq $com.SideIndicator)
        {
            Remove-ADGroupMember -Identity "it_manager" -Members $com.Name
        }
    }
}

Damit kann man eine dynamische Gruppe immitieren. Grundvoraussetzung ist natürlich, dass auch neue Gruppen immer mit dem Muster „IT-Mananger-<Abteilungsnummer>“ angelegt werden. Aber dies wäre für beide Lösungen Bedingung.