Skript zum Löschen vieler alter Benutzerprofile vom Dateiserver?

Skript zum Löschen vieler alter Benutzerprofile vom Dateiserver?

Ich habe eine Netzwerkfreigabe auf einem Windows Server 2012-Computer, die zum Speichern aller Benutzerprofildateien (Eigene Dateien, Desktop usw.) verwendet wird.

Ich muss Hunderte von alten Benutzern loswerden und gehe sie alle einen nach dem anderen durch. Zuerst mache ich den Administrator zum Eigentümer aller Dateien eines Benutzers. Dann gebe ich ihm die vollständige Kontrolle über alle Dateien dieses Benutzers. Dann lösche ich die Dateien dieses Benutzers. Und dann gehe ich zum nächsten Benutzer über.

Dies wird Tage dauern.

In diesem Verzeichnis befinden sich außerdem viele gültige/aktuelle Benutzerdateien, deren Eigentümer ich nicht werden möchte und die ich auch nicht löschen möchte.

Gibt es eine weniger zeitaufwändige Möglichkeit, bestimmte Ordner in dieser Netzwerkfreigabe zu löschen?

Eine Art Skript, das ich in alle alten Benutzer eingeben und ein paar Stunden lang seine Arbeit machen lassen kann?

Antwort1

Klar, mit PowerShell ist alles möglich! :-) Dies ist ein Gesamtprozess, wie das gemacht werden kann.

Sie können damit beginnen, die wichtigsten Ordner/Benutzer, die Sie löschen möchten, mit den Befehlen aus einer CSV-Datei auszulesen Import-CSV $Filename | ForEach-Object.

Für jeden obersten Ordner können Sie dann im ForEach-Block mit alle Unterordner und Dateien auslesen Get-ChildItem -Recurse.

Sie können dann eine zweite CSV-Datei mit den Dateien oder Ordnern haben, die nicht gelöscht werden sollen, und für jede Datei, die Sie durchlaufen, können Sie diese Datei lesen und mit ihr vergleichen, ob sie gespeichert oder gelöscht werden soll (nachdem Sie den Besitz übernommen haben).

Antwort2

Ich musste es noch einmal machen und habe es mir deshalb heute noch einmal angesehen. Ich bin den Vorschlägen von @PatrikN gefolgt und habe folgendes Powershell-Skript verwendet:

Get-ChildItem C:\UserDocs |
    ForEach-Object {
        if (!(Get-ADUser -Filter "sAMAccountName -eq '$($_.Name)'")) {
            "$($_.Name) does not exist and is being deleted."
            takeown /a /r /d Y /f $_.FullName
            $Acl = Get-Acl $_.FullName
            $Acl.AddAccessRule(
                (New-Object System.Security.AccessControl.FileSystemAccessRule(
                    [System.Security.Principal.WindowsIdentity]::GetCurrent().Name,
                    "FullControl",
                    "ContainerInherit, ObjectInherit",
                    "None",
                    "Allow"
                ))
            )
            (Get-Item $_.FullName).SetAccessControl($Acl)
            Remove-Item -LiteralPath $_.FullName -Force -Recurse
        }
    }

Ich habe letztendlich keine CSV-Dateien verwendet.

Das Skript durchläuft alle Benutzerprofilverzeichnisse, fragt ab, ob der Name im Active Directory vorhanden ist, und wenn nicht: Besitz übernehmen, vollständige Berechtigungen festlegen und dann löschen. Es hat gut funktioniert.

verwandte Informationen