oesi1989
Goto Top

Powershell Besitzer von Ordnern ändern

Hallo, ich versuche den Besitzer von User-Ordnern zu ändern, um sie danach zu löschen. Ich habs einmal mit "Get- und Set-Acl" probiert und einmal mit "icacls".
Mit "Get-Acl" kann konnte ich zwar den obersten Ordner den Besitzer ändern, aber nicht die Unterordner.
Mit "icacls" sagt er mir direkt "Zugriff verweigert.

Anbei meine beiden Skripte:

$users = Get-ADUser -filter * -SearchBase "OU=Test,OU=_aussortieren,OU=01_Benutzer_Gruppen,DC=bwkrhs,DC=kob,DC=zsanbw,DC=de" -Properties SamAccountName | Where{$_.Enabled -ne "True"}  
ForEach($user in $users)
{
    "$($user.SamAccountName)"  
    $ordner = "\\bwksrvwsus\TEST_Y\$($user.SamAccountName)\"  

    $Acl = Get-Acl $ordner
    $Acl.SetOwner([System.Security.Principal.NTAccount] "11470762_adm")  
    Set-Acl $ordner $Acl

    #Get-ChildItem -path $ordner -Recurse
    Remove-Item -path $ordner -Recurse #-Force #-Confirm:$false #-ErrorAction SilentlyContinue
}

$users = Get-ADUser -filter * -SearchBase "OU=Test,OU=_aussortieren,OU=01_Benutzer_Gruppen,DC=bwkrhs,DC=kob,DC=zsanbw,DC=de" -Properties SamAccountName | Where{$_.Enabled -ne "True"}  
ForEach($user in $users)
{
    "$($user.SamAccountName)"  
    $ordner = "\\bwksrvwsus\TEST_Y\$($user.SamAccountName)"  
    #"$ordner" 

   #icacls $ordner /remove "$($user.SamAccountName)" 
    icacls $ordner /inheritance:r /grant:r "bwkrhs.kob.zsanbw.de\11470762_adm:(CI)(OI)(F)" /T  
}

Content-ID: 372064

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

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

emeriks
emeriks 24.04.2018 aktualisiert um 15:38:20 Uhr
Goto Top
Hi,
Set-ACL ändert nur die ACL eines Objekts. Wenn Du das für alle Unterordner und Dateien ebenfalls machen willst, dann musst Du die Struktur durchlaufen und für jeden Ordner, jede Datei die ACL auslesen, den Besitzer ändern und die ACL wieder speichern. Anders macht das iacls auch nicht.

Egal ob PowerShell Set-ACL oder iacls: Der Benutzer muss lokaler Administrator und die Shell voll eleviert sein. Oder Du aktvierst im Script die entsprechenden Privilegien. (SE_BACKUP_NAME und SE_RESTORE_NAME) Auch wenn Du remote im Share änderst.

Oder Du führst das Script direkt auf dem Server aus. (Eleviert)

ich versuche den Besitzer von User-Ordnern zu ändern, um sie danach zu löschen
Hier wäre doch ein einfaches TAKEOWN viel einfacher mit anschließender Rechtevergabe für sich selbst.
takeown /f Pfad /r
cacls Pfad /E /T /G Domäne\Benutzer:F
rd Pfad
So oder ähnlich.

E.
oesi1989
oesi1989 24.04.2018 um 16:14:18 Uhr
Goto Top
Es funktioniert so halb, es kommt immer folgende Meldung:

M”chten Sie die Verzeichnisberechtigungen durch Berechtigungen ersetzen, die...
136037
136037 24.04.2018 aktualisiert um 16:23:43 Uhr
Goto Top
Einfach mal in die Doku geschaut, und man glaubt es kaum, bei Takeown den Parameter /d mit anschließendem Y/J für den Silent Betrieb gefunden...
https://docs.microsoft.com/en-us/windows-server/administration/windows-c ...
Je nach OS Sprache muss hier Y oder J angegeben werden... das hat sich bei MS wieder ein Lokalisierungs-Trottel ausgedacht.
oesi1989
oesi1989 24.04.2018 um 16:23:06 Uhr
Goto Top
Also so: takeown /F $ordner /R /D {Y}?
136037
136037 24.04.2018 aktualisiert um 16:24:19 Uhr
Goto Top
Ohne die Geschweiften Klammern natürlich x-), s.o.
oesi1989
oesi1989 24.04.2018 aktualisiert um 16:38:15 Uhr
Goto Top
Ja, das geht zwar, aber ich habe keinen Zugriff auf Unterordner/Dateien.

$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)"  

    takeown /F $ordner /R /D Y
    icacls $ordner /grant "Domäne\User:(CI)(OI)F" /T  

    Remove-Item $ordner -Recurse -Confirm:$false #-ErrorAction SilentlyContinue
}

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".  

ERFOLGREICH: Die Datei (oder der Ordner) "\\bwksrvwsus\TEST_Y\77889911\Documents\desktop.ini" geh”rt jetzt dem Benutzer "BWZKDOM1\11470762_adm".  

ERFOLGREICH: Die Datei (oder der Ordner) "\\bwksrvwsus\TEST_Y\77889911\Documents\Eigene Bilder" geh”rt jetzt dem Benutzer "BWZKDOM1\11470762_adm".  

ERFOLGREICH: Die Datei (oder der Ordner) "\\bwksrvwsus\TEST_Y\77889911\Documents\Eigene Videos" geh”rt jetzt dem Benutzer "BWZKDOM1\11470762_adm".  

ERFOLGREICH: Die Datei (oder der Ordner) "\\bwksrvwsus\TEST_Y\77889911\Documents\$RECYCLE.BIN\desktop.ini" geh”rt jetzt dem Benutzer "BWZKDOM1\11470762_adm".  

ERFOLGREICH: Die Datei (oder der Ordner) "\\bwksrvwsus\TEST_Y\77889911\Documents\Eigene Bilder\$RECYCLE.BIN" geh”rt jetzt dem Benutzer "BWZKDOM1\11470762_adm".  

ERFOLGREICH: Die Datei (oder der Ordner) "\\bwksrvwsus\TEST_Y\77889911\Documents\Eigene Bilder\desktop.ini" geh”rt jetzt dem Benutzer "BWZKDOM1\11470762_adm".  

ERFOLGREICH: Die Datei (oder der Ordner) "\\bwksrvwsus\TEST_Y\77889911\Documents\Eigene Bilder\$RECYCLE.BIN\desktop.ini" geh”rt jetzt dem Benutzer "BWZKDOM1\11470762_adm".  

ERFOLGREICH: Die Datei (oder der Ordner) "\\bwksrvwsus\TEST_Y\77889911\Documents\Eigene Videos\$RECYCLE.BIN" geh”rt jetzt dem Benutzer "BWZKDOM1\11470762_adm".  

ERFOLGREICH: Die Datei (oder der Ordner) "\\bwksrvwsus\TEST_Y\77889911\Documents\Eigene Videos\desktop.ini" geh”rt jetzt dem Benutzer "BWZKDOM1\11470762_adm".  

ERFOLGREICH: Die Datei (oder der Ordner) "\\bwksrvwsus\TEST_Y\77889911\Documents\Eigene Videos\$RECYCLE.BIN\desktop.ini" 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
Bearbeitete Datei: \\bwksrvwsus\TEST_Y\77889911\Documents\desktop.ini
Bearbeitete Datei: \\bwksrvwsus\TEST_Y\77889911\Documents\Eigene Bilder
Bearbeitete Datei: \\bwksrvwsus\TEST_Y\77889911\Documents\Eigene Videos
Bearbeitete Datei: \\bwksrvwsus\TEST_Y\77889911\Documents\$RECYCLE.BIN\desktop.ini
Bearbeitete Datei: \\bwksrvwsus\TEST_Y\77889911\Documents\Eigene Bilder\$RECYCLE.BIN
Bearbeitete Datei: \\bwksrvwsus\TEST_Y\77889911\Documents\Eigene Bilder\desktop.ini
Bearbeitete Datei: \\bwksrvwsus\TEST_Y\77889911\Documents\Eigene Bilder\$RECYCLE.BIN\desktop.ini
Bearbeitete Datei: \\bwksrvwsus\TEST_Y\77889911\Documents\Eigene Videos\$RECYCLE.BIN
Bearbeitete Datei: \\bwksrvwsus\TEST_Y\77889911\Documents\Eigene Videos\desktop.ini
Bearbeitete Datei: \\bwksrvwsus\TEST_Y\77889911\Documents\Eigene Videos\$RECYCLE.BIN\desktop.ini
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

Also die Rechteübernahme funktioniert, er geht auch in jede(n) Unterordner/Datei rein, aber trotzdem habe ich kein Zugriff.
emeriks
emeriks 25.04.2018 aktualisiert um 11:48:47 Uhr
Goto Top
Also die Rechteübernahme funktioniert, er geht auch in jede(n) Unterordner/Datei rein, aber trotzdem habe ich kein Zugriff.
Besitzübernahme ist keine "Rechteübernahme". Ein Besitzer einer Datei hat nicht automatisch Vollzugriff auf diese. Besitzübernahme berechtigt aber dazu, anschließend die ACL zu bearbeiten. Und damit kann man sich selbst Vollzugriff auf die Dateien und Ordner erteilen. Und muss es in solchen Fällen wie Deinem meistens auch. Habe ich aber bereits geschrieben. Einfach lesen.
oesi1989
oesi1989 25.04.2018 um 09:00:33 Uhr
Goto Top
Ja, aber wie mache ich das, was du im 1. Kommentar geschrieben hast?
Ich hab es jetzt erstmal 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 "bwkrhs.kob.zsanbw.de\11470762_adm:(CI)(OI)F" /T  

        Remove-Item $ordner -Recurse -Force -Confirm:$false -ErrorAction SilentlyContinue
    }
    while(Test-Path $ordner)
}
emeriks
emeriks 25.04.2018 um 09:04:22 Uhr
Goto Top
Ich hab es jetzt erstmal mit einer Schleife gelöst.
Ja, und? Funktioniert es?
oesi1989
oesi1989 25.04.2018 um 11:34:13 Uhr
Goto Top
Ja, es funktioniert, sonst würde ich ja nicht "gelöst" schreiben
emeriks
emeriks 25.04.2018 aktualisiert um 11:48:06 Uhr
Goto Top
Prima.
Und warum
a) fragst Du dann
Ja, aber wie mache ich das, was du im 1. Kommentar geschrieben hast?
und
b) schließt Du diese Frage nicht als "gelöst"?
oesi1989
oesi1989 25.04.2018 um 12:35:37 Uhr
Goto Top
Weil ich gerne wissen würde, wie ich direkt die Besitzübernahme und Rechteübernahme mit takeown und icacls machen kann, ohne die Schleife zu benutzen
emeriks
emeriks 25.04.2018 um 12:43:49 Uhr
Goto Top
Weil ich gerne wissen würde, wie ich direkt die Besitzübernahme und Rechteübernahme mit takeown und icacls machen kann, ohne die Schleife zu benutzen
Die ForEach- oder die Do-While-Schleife ?

Die Do-While-Schleife ist gar nicht mal so dumm. Alledrings solltest Du da einen Zähler für eine max. Anzahl an Versuchen einbauen. Sonst kann das u.U. mal in einer Endlosschleife enden.
oesi1989
oesi1989 25.04.2018 um 12:45:15 Uhr
Goto Top
Ja, das stimmt, aber ich weiß ja nicht, wie viele Unterordner der User besitzt und pro Durchgang übernimmt er halt immer ein paar Rechte mehr von den Unterordnern.