Am Arbeitsplatz wurden beim Entfernen von Domänen Benutzern oft nur die AD Accounts gelöscht. Die Mailkonten werden so zwar mitgelöscht, die Benutzerordner (Profil und Home) jedoch nicht. So fielen je länger je mehr Daten an, die zu keinem Benutzer mehr gehörten. Aus diesem Grund entstand das Script, das alle AD Accounts in einer OU löscht und auch die Benutzerordner berücksichtigt.
Da die Ordnerberechtigungen nicht immer ein direktes Löschen zuliessen, setzt das Script vor dem Löschen bei allen Ordnern den Owner auf die Lokale Administratorgruppe und fügt diese mit Full Control den Berechtigungen hinzu. Für das Anpassen der Berechtigungen kommt das Programm SetACL zum Einsatz. Als weiteres kommt ActiveRoles Management Shell for Active Directory von Quest zum Einsatz.

In den Zeilen mit einem Aufruf des Programms SetACL muss jeweils der Pfad und die Benutzergruppe angepasst werden.
Profil und Profil.V2 da wir lange Zeit eine gemischte Umgebung mit Windows XP und Windows 7 hatten.

PowerShell
# Variablen definieren
$UserColl = @()
$acllog = ""
$pslog = ""
$DeletedFolders = "Pfad zum Log für gelöschte Ordner"
$SetACLLog = "Pfad zum Log von SetACL"
$ErrorLog = "Pfad zum Errorlog"
$SearchRoot = "OU mit AD Accounts die gelöscht werden sollen"

# User in OU auslesen
$Users = Get-QADUser -SearchRoot $SearchRoot -SearchScope OneLevel

# Vorgang für jeden User durchführen
ForEach ($User in $Users) {

    $HomeDir = $User.HomeDirectory
    $ProfileDir = $User.ProfilePath
    $ProfileV2 = $User.ProfilePath + ".V2"
    $DistinguishedName = $User.DN
    $Username = $User.SamAccountName

    # Falls ein .V2 Profil vorhanden ist, werden Benutzer und Rechte angepasst und der Ordner gelöscht
    if (Test-Path -Path $ProfileV2) {
        SetACL.exe -on "$ProfileV2" -ot file -actn setowner -ownr "n:LOCALAdministrators" -rec cont_obj -log $SetACLLog -silent
        SetACL.exe -on "$ProfileV2" -ot file -actn ace -ace "n:LOCALAdministrators;p:full" -rec cont_obj -log $SetACLLog -silent

        Try {     
            cmd /c "rmdir /S /Q $ProfileV2"
            $ProfileV2 | Add-Content $DeletedFolders
        } Catch {
            "ERROR beim Entfernen $filename: $_.ExeptionMessage" | Add-Content $ErrorLog
            Write-Output "ProfilV2 von $Username konnte nicht gelöscht werden"
        }
    }

    # Falls ein Profil vorhanden ist, werden Benutzer und Rechte angepasst und der Ordner gelöscht
    if (Test-Path -Path $ProfileDir) {
        SetACL.exe -on "$ProfileDir" -ot file -actn setowner -ownr "n:LOCALAdministrators" -rec cont_obj -log $SetACLLog -silent 
	SetACL.exe -on "$ProfileDir" -ot file -actn ace -ace "n:LOCALAdministrators;p:full" -rec cont_obj -log $SetACLLog -silent

        Try {     
            cmd /c "rmdir /S /Q $ProfileDir"
            $ProfileDir | Add-Content $DeletedFolders
        } Catch {
            "ERROR beim Entfernen $filename: $_.Exception.Message" | Add-Content $ErrorLog
            Write-Output "Profil von $Username konnte nicht gelöscht werden"
        }
    }

    # Falls ein Home Ordner vorhanden ist, werden Benutzer und Rechte angepasst und er Ordner gelöscht
    if (Test-Path -Path $HomeDir) {
        SetACL.exe -on "$HomeDir" -ot file -actn setowner -ownr "n:LOCALAdministrators" -rec cont_obj -log $SetACLLog -silent
        SetACL.exe -on "$HomeDir" -ot file -actn ace -ace "n:LOCALAdministrators;p:full" -rec cont_obj -log $SetACLLog -silent

        Try {     
            cmd /c "rmdir /S /Q $HomeDir"
            $HomeDir | Add-Content $DeletedFolders
        } Catch {
            "ERROR beim Entfernen $filename: $_.Exception.Message" | Add-Content $ErrorLog
            Write-Output "Home von $Username konnte nicht gelöscht werden"
        }  
    }

    Try {
        # Löschen des AD Benutzerobjekts
        Remove-QADObject -Identity $DistinguishedName -Force -DeleteTree 
    } Catch {
        "ERROR beim Entfernen: $_.Exception.Message" | Add-Content $ErrorLog
        Write-Output "Benutzerkonto von $Username konnte nicht gelöscht werden"
    }   
}
Categories: Informatik

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *