By Patrick Wahlmueller

KI und Automatisierung in der Praxis

PowerShell 1 Min. Lesezeit

Benutzerverzeichnisse von nicht autorisierten Benutzern finden

Ein PowerShell-Skript, um auf einem Terminalserver übrig gebliebene Benutzerverzeichnisse von Benutzern zu finden und zu löschen, die keine AD-Gruppenmitgliedschaft mehr haben.

Wir wollten unsere Terminalserver bereinigen, indem wir vorhandene Benutzerverzeichnisse von nicht autorisierten Benutzern (z. B. gelöschte AD-Konten) löschen. Als Nebeneffekt haben wir auch alle autorisierten Benutzer identifiziert, die sich noch nie am Server angemeldet haben.

# Benutzerverzeichnisse auf einem Server (z. B. Terminalserver) von nicht autorisierten
# Benutzern finden und löschen.
# Findet auch autorisierte Benutzer, die sich noch nie angemeldet haben
# (autorisierte Benutzer ohne Benutzerverzeichnis).

Import-Module ActiveDirectory

# Der Verzeichnisname muss dem SamAccountName entsprechen; Pfad muss mit "\" enden
$pfad    = "C:\Users\"
$adgruppe = "IhrGruppenname"

$benutzer = Get-ADGroupMember $adgruppe | Select-Object SamAccountName
$benutzer = $benutzer | Add-Member -MemberType AliasProperty -Name Name -Value SamAccountName -PassThru

$verz  = Get-ChildItem $pfad | Where-Object { $_.Attributes -eq 'Directory' } | Select-Object Name

# Verzeichnisse ohne übereinstimmenden AD-Benutzer (sollten gelöscht werden)
$loeschen = Compare-Object $verz $benutzer -Property Name | Where-Object { $_.SideIndicator -eq '<=' }

# AD-Benutzer ohne übereinstimmendes Verzeichnis (noch nie angemeldet)
$nochNie  = Compare-Object $verz $benutzer -Property Name | Where-Object { $_.SideIndicator -eq '=>' }

# Nicht autorisierte Verzeichnisse löschen
foreach ($v in $loeschen) {
    $vv = $pfad + $v.Name
    Remove-Item -Recurse $vv
}

Hinweis: Untergruppen (verschachtelte AD-Gruppen) werden von Get-ADGroupMember ohne das Flag -Recursive nicht unterstützt.