Active Directory Gruppen bereinigen mit PowerShell

The estimated reading time 2 minutes

Es ist ungemein wichtig das lokale AD (falls noch eines vorhanden ist) zu pflegen und auch deaktiviert Benutzer aus Gruppen zu entfernen. Manchmal möchte man ja die Benutzer noch nicht komplett löschen, sondern nur aus speziellen Gruppen entfernen, da hier eventuell Lizenzen oder auch Zugriffe berechtigt sind.

Ich hatte hier ebenfalls einen Anwendungsfall und habe dazu ein kleines PowerShell Skript geschrieben, welches mit eine AD Gruppe durchsucht und die deaktivierten Benutzer aus dieser AD-Gruppe entfernt. Lässt sich natürlich auch auf lokale Exchange Verteiler anwenden.
HINWEIS: sollte ein Freigegebenes Postfach / Raumpostfach dabei sein , würde dieses ebenfalls entfernt werden, da dies auch deaktivierte Benutzer sind.

Nun aber zum Script. In dieser Ausbaustufe entfernt das Script nichts aus der Gruppen, dies ist mehr oder weniger eine Simulation. Um tatsächlich Benutzer aus der Gruppe zu entfernen muss aus Zeile 23 das „-whatif“ entfernt werden.

#type the adgroup name to check
$grouptoclean = "XXXXX"

####
$dcfqdn  = ((Get-ADDomainController).Hostname)

$groupmembers = Get-ADGroupMember -Server $dcfqdn -Identity $grouptoclean  | sort

$inactiveusers = @()
foreach($user in $groupmembers){

  $dist = ($user).distinguishedName
  
  $enabled = Get-ADUser -Server $dcfqdn -Identity "$dist" | Where-Object{$_.enabled -eq $false}
  $sam = ($enabled).SamAccountName
  $upn = ($enabled).UserPrincipalName
  $active = ($enabled).Enabled
  
  if($enabled){
    Write-Host "UPN: $upn , SAM: $sam is disabeld, Status: $active" -ForegroundColor Yellow
    $inactiveusers += $sam 
    Remove-ADGroupMember -Identity $grouptoclean -Members $sam -server $dcfqdn -Confirm:$false -WhatIf
    
  }
  else{
      $member = Get-ADUser -Server $dcfqdn -Identity "$dist"
      
      $sammember = ($member).SamAccountName
      $upnmember = ($member).UserPrincipalName
      $activemember = ($member).Enabled
      
    Write-Host "UPN: $upnmember, SamAccountName: $sammember Status: $activemember"
  
  } 
  
 
} 


$inactiveusers

($inactiveusers).count 

#$inactiveusers = $null

Die Konsole gibt nun alle Benutzer aus, die die PowerShell entfernen würde

Mit der Variablen „$inactiveusers“ können alle inaktiven Gruppenmitglieder angezeigt werden. Wird das Script ein zweites Mal mit der gleichen Konsole ausgeführt werden die Benutzer angehängt. Um die Variable zu leeren kann die letzte Zeile „$inactiveusers = $null“ verwendet werden.

Mit „($inactiveusers).count“ können diese einfach gezählt werden.

Viel Erfolg beim bereinigen der lokalen AD Gruppen mit PowerShell. Wenn euch der Artikel gefallen hat, klickt bitte auf „Helpful“.

Was this article helpful?
YesNo
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments