none
Ordner von Usern löschen RRS feed

  • Frage

  • Hallo,
    ich würde gerne die Ordner von deaktivierten Usern löschen.
    Wie kann ich den Besitz von Unterordnern bekommen oder kann ich das Löschen "erzwingen"?

    $users = Get-ADUser -filter * -SearchBase "OU=Test,..." -Properties SamAccountName | Where{$_.Enabled -ne "True"}
    ForEach($user in $users)
    {
        $ordner = "\\bwksrvwsus\TEST_Y\$($user.SamAccountName)"
    
        $Acl = Get-Acl $ordner
        $Account = new-object system.security.principal.NTAccount("11470762_adm")
        $Acl.SetOwner($Account)
        Set-Acl $ordner $Acl
    
        #Get-ChildItem "\\bwksrvwsus\TEST_Y\" | Remove-Item $ordner -Force
        Remove-Item $ordner -Recurse -Force -Confirm:$false -ErrorAction SilentlyContinue


    Montag, 23. April 2018 13:30

Antworten

  • Als Admin mit entsprechender Berechtigung darf ich auch fremde Objekte löschen.

    Was die Eignerschaft angeht, so suche die zusätzliche Option für "Unterordner und Objekte inklusive" bzw. "Vererben der Eigenschaften auf Unterobjekte", dann verlieren die Unterobjekte ihre eigenen Einstellungen.

    Montag, 23. April 2018 13:37
  • >      $ordner = "\\bwksrvwsus\TEST_Y\$($user.SamAccountName)"

    takeown /f $ordner /a /r /d j
    icacls $ordner /grant *s-1-5-32-544:(OI)(CI)F /r /c

    Oder so ähnlich. Beides (Besitz übernehmen und mir dann Vollzugriff verschaffen) würde ich nicht ohne Not per PS lösen, takeown/icacls können das viel besser.

    Und das .SetOwner, das Du aktuell probierst, dürfte nicht gehen, da das nur klappt, wenn der ausführende Account schon das Recht hat, den Besitzer zu ändern.

    Montag, 23. April 2018 14:23

Alle Antworten

  • Als Admin mit entsprechender Berechtigung darf ich auch fremde Objekte löschen.

    Was die Eignerschaft angeht, so suche die zusätzliche Option für "Unterordner und Objekte inklusive" bzw. "Vererben der Eigenschaften auf Unterobjekte", dann verlieren die Unterobjekte ihre eigenen Einstellungen.

    Montag, 23. April 2018 13:37
  • Das ist die Fehlermeldung:

    Remove-Item : Der Zugriff auf den Pfad "\\bwksrvwsus\TEST_Y\44556677\Documents" wurde verweigert.

    Ich führe das Skript als Admin aus und bin auch der Besitzer des Userordners. Das funktioniert auch.
    Montag, 23. April 2018 13:48
  • >      $ordner = "\\bwksrvwsus\TEST_Y\$($user.SamAccountName)"

    takeown /f $ordner /a /r /d j
    icacls $ordner /grant *s-1-5-32-544:(OI)(CI)F /r /c

    Oder so ähnlich. Beides (Besitz übernehmen und mir dann Vollzugriff verschaffen) würde ich nicht ohne Not per PS lösen, takeown/icacls können das viel besser.

    Und das .SetOwner, das Du aktuell probierst, dürfte nicht gehen, da das nur klappt, wenn der ausführende Account schon das Recht hat, den Besitzer zu ändern.

    Montag, 23. April 2018 14:23
  • Habe es jetzt mal so probiert, geht aber auch nicht. Probiere morgen mal das andere aus

    $Right="FullControl"
        $Principal="Domäne/User"
        $rule=New-Object System.Security.AccessControl.FileSystemAccessRule($Principal,$Right,"3","0","Allow")
    
        $Acl = Get-Acl $ordner
        $Acl.SetAccessRule($rule)
        Write-Output $rule
        Set-Acl $ordner $Acl
    
    
    



    • Bearbeitet Oesi1989 Montag, 23. April 2018 14:36
    Montag, 23. April 2018 14:36
  • Bzgl. des Besitzers hatte ich am Beispiel des Ordners "Windows.Old" nach dem großen Patch das Problem, dass ich nicht in den Ordner reingehen konnte obwohl ich Admin bin.
    Allerdings konnte ich das, nach dem ich den Besitzer auf mich geändert hatte.
    Es ging nicht, die Zugriffsrechte zu ändern, da ich ja nicht Besitzer war.

    Ganz schön krude.

    Montag, 23. April 2018 15:31
  • Aber kann ich takeown oder icacls auch in PS nutzen? Weil ich muss ja prüfen, ob die Nutzer deaktiviert sind etc
    Dienstag, 24. April 2018 07:40
  • Dienstag, 24. April 2018 09:02
  • > Aber kann ich takeown oder icacls auch in PS nutzen? Weil ich muss ja prüfen, ob die Nutzer deaktiviert sind etc

    Hab ich hier schon verlinkt: http://social.technet.microsoft.com/Forums/de-DE/powershell_de/thread/5f030318-8369-460c-8ede-1d889a8e0a12#39d698d8-bfa7-4f20-a632-208cb9347a73

    Ich verlier grad die Lust, Dir zu helfen...

    Dienstag, 24. April 2018 09:19
  • Die Powershell ist, wie auch cmd, ein ganz normaler Kommandozeileninterpreter - eine Konsole - eine Shell.

    Du kannst auch alle Kommandozeilentools starten, wie Du das vorher in der cmd gemacht hast.
    Du kannst ja mal z.B. in der PS-Konsole einfach "tree c:\windows" eingeben und Enter drücken.  ;-)
    So lange das Tool, welches Du ausführen möchtest im Pfad zu finden ist bzw. wenn Du den kompletten Pfad mit angibst, brauchst Du auch keinen Call-Operator & oder Start-Process oder so.


    Best regards,

    (79,108,97,102|%{[char]$_})-join''


    • Bearbeitet BOfH-666 Dienstag, 24. April 2018 09:24
    Dienstag, 24. April 2018 09:23
  • Ich habe das jetzt mit dem icacls probiert, aber er sagt immer, Zugriff verweigert.

    $users = Get-ADUser -filter * -SearchBase "OU=Test,...rue"}
    #Search-ADAccount -AccountDisabled -SearchBase "OU=Test,OU=_aussortieren,OU=01_Benutzer_Gruppen,DC=bwkrhs,DC=kob,DC=zsanbw,DC=de"
    ForEach($user in $users)
    {
        "$($user.SamAccountName)"
        $ordner = "\\bwksrvwsus\TEST_Y\$($user.SamAccountName)"
    
        #icacls.exe $ordner /remove "$($user.SamAccountName)"
        icacls.exe $ordner  /grant:r "Domäne\User:(CI)(OI)F" /T
    }


    • Bearbeitet Oesi1989 Dienstag, 24. April 2018 11:12
    Dienstag, 24. April 2018 10:52
  • So lange das Tool, welches Du ausführen möchtest im Pfad zu finden ist bzw. wenn Du den kompletten Pfad mit angibst, brauchst Du auch keinen Call-Operator & oder Start-Process oder so.

    Ich hab's mir nur irgendwann mal angewöhnt, externe Executables/Scripts aufgrund einer Microsoft-Empfehlung immer vollqualifiziert aufzurufen. wo man dann doch bei den Varianten Call-Operator & oder Start-Process landet, weil der Pfad zum Executable/Script dann in einer Variablen gespeichert ist. (Ist in PowerShell genau genommen nicht erforderlich, weil diese Executables aus dem aktuellen Verzeichnis nur ausführt, wenn das mit .\ explizit angegeben wird.) 

    Dienstag, 24. April 2018 13:33
  • Ja, aber was ist jetzt genau die Lösung?
    Dienstag, 24. April 2018 14:14
  • $users = Get-ADUser -filter * -SearchBase "OU=Test,..." -Properties SamAccountName | Where{$_.Enabled -ne "True"}
    ForEach($user in $users)
    {
        "$($user.SamAccountName)"
        $ordner = "\\bwksrvwsus\TEST_Y\$($user.SamAccountName)"
        #"$ordner"
    
        takeown /F $ordner /R /D Y
        icacls $ordner /grant "Domain/User:(CI)(OI)F" /T
    
        Remove-Item $ordner -Recurse -Confirm:$false -ErrorAction SilentlyContinu
    }
    Fehlermeldung:

    ERFOLGREICH: Die Datei (oder der Ordner) "\\bwksrvwsus\TEST_Y\77889911" geh”rt jetzt dem Benutzer "BWZKDOM1\11470762_adm".
    
    ERFOLGREICH: Die Datei (oder der Ordner) "\\bwksrvwsus\TEST_Y\77889911\Documents" geh”rt jetzt dem Benutzer "BWZKDOM1\11470762_adm".
    
    ERFOLGREICH: Die Datei (oder der Ordner) "\\bwksrvwsus\TEST_Y\77889911\Documents\$RECYCLE.BIN" geh”rt jetzt dem Benutzer "BWZKDOM1\11470762_adm".
    
    
    Bearbeitete Datei: \\bwksrvwsus\TEST_Y\77889911
    Bearbeitete Datei: \\bwksrvwsus\TEST_Y\77889911\Documents
    Bearbeitete Datei: \\bwksrvwsus\TEST_Y\77889911\Documents\$RECYCLE.BIN
    
    13 Dateien erfolgreich verarbeitet, bei 0 Dateien ist ein Verarbeitungsfehler aufgetreten.
    Remove-Item : Das Element \\bwksrvwsus\TEST_Y\77889911\Documents\$RECYCLE.BIN\desktop.ini kann nicht entfernt werden: Sie besitzen keine ausreichenden Zugriffsberechtigungen zum Ausführen 
    dieses Vorgangs.
    In Zeile:12 Zeichen:5
    +     Remove-Item $ordner -Recurse -Confirm:$false #-ErrorAction Silent ...
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : PermissionDenied: (desktop.ini:FileInfo) [Remove-Item], IOException
        + FullyQualifiedErrorId : RemoveFileSystemItemUnAuthorizedAccess,Microsoft.PowerShell.Commands.RemoveItemCommand
    Remove-Item : Das Verzeichnis "\\bwksrvwsus\TEST_Y\77889911\Documents\$RECYCLE.BIN" kann nicht entfernt werden, da es nicht leer ist.
    In Zeile:12 Zeichen:5
    +     Remove-Item $ordner -Recurse -Confirm:$false #-ErrorAction Silent ...
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : WriteError: ($RECYCLE.BIN:DirectoryInfo) [Remove-Item], IOException
        + FullyQualifiedErrorId : DirectoryNotEmpty,Microsoft.PowerShell.Commands.RemoveItemCommand



    • Bearbeitet Oesi1989 Mittwoch, 25. April 2018 07:01
    Dienstag, 24. April 2018 14:41
  • Beim ersten Script-Snippet in diesem Thread ganz oben hattest Du noch ein -Force bei Deinem Remove-Item - Aufruf dabei. Das fehlt jetzt. Ist das nur ein Kopier-Fehler oder fehlt es wirklich?

    Best regards,

    (79,108,97,102|%{[char]$_})-join''

    Dienstag, 24. April 2018 14:55
  • Ja, hat eigentlich auch nicht so viel gebracht.
    Habe es jetzt mit einer Schleife gelöst:

    $users = Get-ADUser -filter * -SearchBase "OU=Test,..." -Properties SamAccountName | Where{$_.Enabled -ne "True"}
    
    ForEach($user in $users)
    {
        do
        {
            $ordner = "\\bwksrvwsus\TEST_Y\$($user.SamAccountName)"
            #"$ordner"
            takeown /F $ordner /R /D Y
            icacls $ordner /grant "Domain/User:(CI)(OI)F" /T
    
            Remove-Item $ordner -Recurse -Force -Confirm:$false -ErrorAction SilentlyContinue
        }
        while(Test-Path $ordner)
    }

    Mittwoch, 25. April 2018 07:02