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.
# 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"
}
}
0 Comments