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-Key: 270508

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

Printed on: April 20, 2024 at 01:04 o'clock

Member: Chonta
Chonta Apr 28, 2015 at 15:38:12 (UTC)
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
Member: Dani
Dani Apr 28, 2015 at 16:01:34 (UTC)
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
Mitglied: 14634
14634 Apr 28, 2015 at 16:15:50 (UTC)
Goto Top
Hallo,

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

Danke euch für eure Antworten.
Member: Dani
Dani Apr 28, 2015 at 16:38:43 (UTC)
Goto Top
Moin,
ist das Script öffentlich oder nur bei euch in Gebrauch?
Wurde von der Entwicklungsabteilung geschrieben. Daher nicht öffentlich.


Gruß,
Dani
Member: colinardo
Solution colinardo Apr 29, 2015, updated at Apr 30, 2016 at 17:09:22 (UTC)
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
Member: wisebeer
wisebeer Jul 03, 2015 at 15:18:18 (UTC)
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
Member: colinardo
colinardo Jul 03, 2015 updated at 15:33:48 (UTC)
Goto Top
Zeile 4 so anpassen:
$userdirs = get-aduser -Filter * | %{"$($_.SamAccountName).V2"}  
Gruß uwe
Member: wisebeer
wisebeer Jul 03, 2015 at 15:39:37 (UTC)
Goto Top
Vielen Dank!
Member: wisebeer
wisebeer Nov 03, 2015 at 17:33:43 (UTC)
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
Member: colinardo
colinardo Nov 03, 2015 updated at 17:36:49 (UTC)
Goto Top
Hallo Martin,
steht in meinem letzten Post, einfach statt V2 am Ende dein V5 rein schreiben ...

Grüße Uwe
Member: wisebeer
wisebeer Nov 03, 2015 at 17:48:14 (UTC)
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
Member: colinardo
colinardo Nov 03, 2015, updated at Nov 04, 2015 at 07:54:13 (UTC)
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  
Member: wisebeer
wisebeer Nov 05, 2015 at 15:28:23 (UTC)
Goto Top
Vielen Dank! Funktioniert perfekt!
Member: colinardo
colinardo Dec 30, 2015 at 18:56:13 (UTC)
Goto Top
An den TO: Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.

Guten Rutsch