14634
Goto Top

AD User gelöscht Basisordner bleibt bestehen

Hallo zusammen,

kurz zur Infrastruktur:

Domäne 2012R2
Client: Windows 7 32bit

die User sind im AD angelegt und unter Profil -> Basisordner -> "Verbinden von" ist das Homelaufwerk des jeweiligen User hinterlegt, der String schaut wie folgt aus:

\\server\h$\%username%

soweit alles noch gut.

Sobald ist aber User lösche, wird leider nicht der Ordner unter h$ gelöscht sondern bleibt bestehen, dies führt natürlich zu viel Datenmüll.

Hat jemand eine gute Idee wie ich die toten Ordner löschen kann? Manuel würde ich das ungerne machen, da es sich doch um einige Ordner handelt.

Content-ID: 270508

Url: https://administrator.de/contentid/270508

Ausgedruckt am: 08.11.2024 um 08:11 Uhr

Chonta
Chonta 28.04.2015 um 17:38:12 Uhr
Goto Top
Hallo,

die Ordner werden auch aus guten Gründen nicht automatisch gelöscht.
Allein aus Datenschutzgründen ist dem Arbeitnehmer seib Profiel eine Private Angelegenheit, die durch Firmenrichtlinien entsprächend abgesichert werden muss.
Du kannst ein Script schreiben, das die checkt ob der Besitzer jemand ist den es gibt und wenn nicht alles löscht.

Gruß

Chonta
Dani
Dani 28.04.2015 um 18:01:34 Uhr
Goto Top
Moin,
Sobald ist aber User lösche, wird leider nicht der Ordner unter h$ gelöscht sondern bleibt bestehen, dies führt natürlich zu viel Datenmüll.
Wir haben das Löschen von Benutzer inzwischen gescriptet mit Hilfe von Powershell. Denn es gibt noch andere Abhängigkeiten wie z.B. Gruppen, wo SID-Leichen zurückbleiben. Somit wird alles sauber entfernt und zum Schluss Exchangepostfach und Benutzer entfernt.


Gruß,
Dani
14634
14634 28.04.2015 um 18:15:50 Uhr
Goto Top
Hallo,

ist das Script öffentlich oder nur bei euch in Gebrauch?

Danke euch für eure Antworten.
Dani
Dani 28.04.2015 um 18:38:43 Uhr
Goto Top
Moin,
ist das Script öffentlich oder nur bei euch in Gebrauch?
Wurde von der Entwicklungsabteilung geschrieben. Daher nicht öffentlich.


Gruß,
Dani
colinardo
Lösung colinardo 29.04.2015, aktualisiert am 30.04.2016 um 19:09:22 Uhr
Goto Top
Hallo zusammen,
mit einem fertigen Script wie es Dani zu haben scheint kann ich gerade nicht aufwarten, aber wenn es nur darum geht das Verzeichnis mit den Usern im AD abzugleichen und die unzugeordneten Ordner ausfindig zu machen und zu löschen kann ich hiermit als Grundlage dienen:
# Root-Ordner in dem die Userordner liegen
$userroot = '\\server\h$'  
# alle User aus dem AD lesen
$userdirs = get-aduser -Filter * | select -Expand SamAccountName
# Unterordner einlesen
$fsdirs = gci $userroot | ?{$_.PSIsContainer} | select -Expand Name
# Vergleich durchführen und nur unzugeordnete Ordner verarbeiten
compare $userdirs $fsdirs | ?{$_.Sideindicator -eq "=>"} | %{  
    $folder = $userroot + "\" + $_.InputObject  
    write-host "Ordner '$folder' ist keinem Benutzer zugeordnet."  
    remove-item $folder -Recurse -Force -Confirm:$true
}
Der der Useraccount der das Script ausführt sollte natürlich genügend Rechte auf den Ordnern besitzen, ansonsten müsste man noch ein "takeown" und die ACL anpassen einbauen.
In Zeile 7 ist das Löschen im Moment mit einer Abfrage versehen -Confirm:$true, möchte man das nicht, legt man es hier auf $false.

Grüße Uwe

p.s. Man kann solche Aufräum-Scripte auch mit den CMDLet-Extension-Agents koppeln, dann werden beim einfachen Löschen eines Users automatisch Scripte ausgeführt welche den Rest aufräumen.
Mehr dazu findet man in folgender Anleitung:
Exchange - Nutzung der Cmdlet Extension Agents (Scripte automatisch bei Ereignissen ausführen lassen, ab Exchange 2010)


Nachtrag: Hier mal noch etwas Code zum Löschen eines User-Accounts und seiner Bestandteile:
function cleanup-user{
    param(
        [string[]]$username
    )
    begin{
        # load required modules
        # For Exchange 2013
        Add-PSSnapin Microsoft.Exchange.Management.Powershell.Snapin -EA Stop
        
        # For Exchange 2010
        # Add-PSSnapin Microsoft.Exchange.Management.Powershell.E2010 -EA Stop
        
        Import-Module ActiveDirectory -EA Stop
    }
    process{
        
        $username | %{
            # get AD user object
            $userobj = get-aduser $_ -Properties memberof, homedirectory -EA SilentlyContinue
            if ($userobj){
                write-host " --> Cleaning up User '$_' ..." -ForegroundColor Green  
                write-host "Removing user from Groups..."  
                # remove users from all their group-membership
                $userobj | %{$_.memberof | %{Remove-ADGroupMember $_ -Members $userobj.SamAccountName -Confirm:$false}}

                write-host "Removing Homedirectory-Data ..."  
                # remove HomeDirectory of user in
                if ((Test-Path $userobj.HomeDirectory)){remove-item $userobj.HomeDirectory -recurse -force}
    
                write-host "Removing Mailbox ..."  
                # remove users Exchange mailbox and AD-Account
                Disable-Mailbox $userobj.SamAccountName -Confirm:$false -EA SilentlyContinue
            
                write-host "Removing AD-Account ..."  
                # remove AD-Account
                remove-aduser $userobj -Confirm:$false
            }
        }

    }
    end{}
}
Benutzung:
cleanup-user -username "maxmuster","annamusterfrau"

Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
wisebeer
wisebeer 03.07.2015 um 17:18:18 Uhr
Goto Top
Danke Colinardo für das Skript, funktioniert wunderbar! Ich versuche gerade das obere für die Profilordner anzupassen, scheitere aber daran, dass die Profile .V2 als Endung haben. Wenn ich + ".V2" ausführe wird dies nur beim letzten User in der AD-Abfrage angehängt, nicht aber bei allen anderen, was natürlich dazu führt, dass alle Profil gelöscht werden. Kann mir jemand einen Tipp geben, wie ich vorgehen muss, damit alle Elemente mit der Endung ergänzt werden?

LG Martin
colinardo
colinardo 03.07.2015 aktualisiert um 17:33:48 Uhr
Goto Top
Zeile 4 so anpassen:
$userdirs = get-aduser -Filter * | %{"$($_.SamAccountName).V2"}  
Gruß uwe
wisebeer
wisebeer 03.07.2015 um 17:39:37 Uhr
Goto Top
Vielen Dank!
wisebeer
wisebeer 03.11.2015 um 18:33:43 Uhr
Goto Top
Kennt jemand von den Powershell Spezialisten eine Möglichkeit das Skript so anzupassen, dass auch .V5 Profile in die Abfrage aufgenommen werden, weil ich ein paar WIN10 Clients habe und diese Profile bei jedem Ausführen des Skripts gelöscht werden.

LG Martin
colinardo
colinardo 03.11.2015 aktualisiert um 18:36:49 Uhr
Goto Top
Hallo Martin,
steht in meinem letzten Post, einfach statt V2 am Ende dein V5 rein schreiben ...

Grüße Uwe
wisebeer
wisebeer 03.11.2015 um 18:48:14 Uhr
Goto Top
Hallo Uwe,

Das ist klar, aber wenn ich einfach nur die Dateiendung anpasse, werden beim Ausführen jeweils alle anderen gelöscht, was ich natürlich nicht möchte. Also wenn ich .V2 verwende, löscht das Skript alle .V5 und umgekehrt.

Liebe Grüße,
Martin
colinardo
colinardo 03.11.2015, aktualisiert am 04.11.2015 um 08:54:13 Uhr
Goto Top
Ach sorry, Frage zu schnell überflogen...

Kannst du hiermit abfackeln:
# Root-Ordner in dem die Userordner liegen
$userroot = '\\server\h$'  
# alle User aus dem AD lesen
$users = get-aduser -Filter * | select -Expand SamAccountName
gci $userroot | ?{$_.PSIsContainer -and ($_.Name -replace '\.(V2|V5)$','') -notin $users} | remove-item -Recurse -Force -Confirm:$true  
wisebeer
wisebeer 05.11.2015 um 16:28:23 Uhr
Goto Top
Vielen Dank! Funktioniert perfekt!
colinardo
colinardo 30.12.2015 um 19:56:13 Uhr
Goto Top
An den TO: Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.

Guten Rutsch