Peter Kloep

A+ R A-

Finden von nicht verwendeten Gruppen im Active Directory

  • Hauptkategorie: FAQs
  • Kategorie: Scripts
  • Zuletzt aktualisiert: Samstag, 03. März 2018 11:59
  • Veröffentlicht: Freitag, 12. Januar 2018 17:58
  • Geschrieben von Peter Kloep
  • Zugriffe: 863

Schnelles "Quick and dirty"-Skript, welches die Gruppen im Active Directory (außer in Builtin und Users) ausliest und eine zusätzliche Liste der in den Berechtigungen (ACLs) der Ordner und Unterordner in der definierten Variable ($Startordner) nimmt und aus der "$Domaingroups" alle verwendeten Gruppen rauslöscht (nur aus der Liste, nicht aus dem Active Directory).

Es erfolgt dann die Ausgabe der DistinguishedNames der Gruppen, die nicht in den ACLs des angegebenen Ordners vorhanden sind.

Vorsicht: Es werden aktuell keine Audit-Berechtigungen und keine Freigabeberechtigungen ausgewertet. Zusätzlich kann nicht festgestellt werden, ob die Gruppen an anderer Stelle berechtigt sind.

$StartOrdner="c:\Daten"
[System.Collections.ArrayList]$Domaingroups = Get-ADGroup -Filter * | Where-Object {($_.distinguishedname -notlike "*$((get-addomain).Userscontainer)") -and ($_.distinguishedname -notlike "*CN=Builtin,$((get-addomain).DistinguishedName)") }
[array]$alleOrdner = Get-ChildItem $StartOrdner -Recurse -Directory
$usedgroups=@()
foreach ($Ordner in $alleOrdner)
{
  $acl=get-acl $ordner.FullName
  for ($i=0; $i -lt $acl.access.count;$i++)
  {
    if ($acl.Access[$i].IdentityReference.Value -like "$((Get-ADDomain).NetBIOSName)\*")
      {
      $usedgroups+=($acl.Access[$i].IdentityReference.Value).split("\")[1]
      }
  }
}
$usedgroups = $usedgroups | Sort-Object | Get-Unique
Write-Host "Gruppen im Active Directory gesamt: $(($Domaingroups).count)" -BackgroundColor Green
Write-Host "In den ACL verwendete Domänengruppen gesamt: $(($Usedgroups).count)" -BackgroundColor Green
###Vergleich der Gruppen
for ($i=0; $i -lt $usedgroups.count; $i++)
  {
    for ($j=0; $j -lt $Domaingroups.count; $j++)
    {
       if ($Domaingroups[$j].name -like $usedgroups[$i])
      {
            $Domaingroups.RemoveAt($j)
      }
       }
  }
Write-Host "Nicht verwendete AD-Gruppen:"
for ($i=0; $i -lt $Domaingroups.count; $i++)
{
  write-host $Domaingroups[$i].distinguishedname
}