Besitzerfenster rekursiv ändern 7


95

Irgendwie habe ich versehentlich alle Dateien in einem Unterordner auf "Kein Besitzer" gesetzt und ich kann scheinbar nicht alle Berechtigungen ändern. Ich kann eine von Hand ändern, indem ich den Besitzer ändere und dann die Berechtigungen setze. Wie kann ich den Besitzer aller Dateien ändern? sofort in diesem Verzeichnis?

Antworten:


92

Verwenden Sie takeownan der Eingabeaufforderung, um den Besitz eines Ordners, aller seiner Unterordner und Dateien rekursiv zu übernehmen:

takeown /f "c:\folder\subfolder" /r

Dies funktioniert gut, aber wenn Sie Ihre Befehlszeilenkonsole nicht als Administrator ausführen, schlägt dies möglicherweise für Dateien fehl, die Sie nicht besitzen.


105

Um wirklich fehlerhafte Berechtigungen zu beheben, führen Sie am besten diese beiden Befehle nacheinander aus:

takeown /f "C:\path\to\folder" /r
icacls "C:\path\to\folder" /reset /T

Der erste gibt Ihnen den Besitz aller Dateien, was jedoch möglicherweise nicht ausreicht, wenn beispielsweise für alle Dateien die Berechtigung Lesen / Schreiben / Ausführen auf "Verweigern" festgelegt ist. Sie besitzen die Dateien, können aber nichts damit anfangen.

Führen Sie in diesem Fall den zweiten Befehl aus, der die fehlerhaften Berechtigungen behebt.


3
Exzellente technische Beratung ... Ihre Lösung war die einzige, die funktionierte. Danke noch einmal.
Carrabino

4
Bester Rat, müssen Sie sowohl Takeown als auch icacls verwenden.
Gnac

2
/ Eine Option ist nützlich, wenn Sie der Administratorgruppe anstelle des aktuellen Besitzers den Besitz zuweisen möchten. Dazu benötigen Sie Administratorrechte. Möglicherweise muss das Cmd-Fenster mit Strg-Umschalt-Eingabe geöffnet werden.
PeterVermont

4
Ich habe den /D YParameter hinzugefügt , takeowndamit er automatisch rekursive Verzeichnisse bestätigt, für die Sie keine Listenverzeichnisberechtigungen haben.
Jeroen Wiert Pluimers

3
@JeroenWiertPluimers, obwohl es ein guter Rat ist, habe ich die Bearbeitung entfernt, da es (dummerweise) ein lokalisierter Parameter ist, so dass es auf Englisch Windows sein wird /D Y, auf Französisch /D O, vielleicht auf Spanisch /D S, etc.
laurent

26

Beachten Sie, dass cacls (seit Windows Vista?) Nicht mehr empfohlen wird icacls.

Dieser Befehl setzt die Berechtigungen für einen Ordner rekursiv zurück:

icacls "C:\path\to\folder" /reset /T

5

Sie können caclsan der Eingabeaufforderung Folgendes verwenden:

cacls "C: \ Pfad \ zu \ Ordner" / E / T / C / G "Administrator": F

Der /TSchalter ermöglicht eine rekursive Funktion. Ersetzen Sie Administratordurch den Benutzer, dem Sie Berechtigungen erteilen möchten.


1

Ich hatte Probleme mit Dateien mit sehr langen Pfaden (mehr als 256 Zeichen). Die beiden Befehle

takeown /f "C:\path\to\really_long_folder_name" /r
icacls "C:\path\to\really_long_folder_name" /reset /T

funktionierte bis auf diese dateien mit wirklich langen pfaden und namen. Am Ende habe ich mich umbenannt

"C:\path\to\really_long_folder_name"

zu

"C:\path\to\r"

und dann rennen

takeown /f "C:\path\to\r" /r /D Y
icacls "C:\path\to\r" /grant Everyone:(F) /t /c /q

Danach konnte ich die Ordner in etwas Vernünftigeres umbenennen. takeown's / DY antwortet mit Ja auf Eingabeaufforderungen. Für icacls habe ich / grant verwendet, um allen Zugriff zu gewähren (da ich nur versucht habe, von einem toten PC aus auf Daten auf einer Festplatte zuzugreifen) Erfolge) und / c, um Fehler anzuzeigen. Ich habe den Vorgang wiederholt und Ordner umbenannt, bis alle Dateiberechtigungen erfolgreich aktualisiert wurden.

Hoffentlich hilft dies jemandem, der auf Fehler gestoßen ist, die den Fehlern "Objekte im Containerzugriff konnten nicht aufgezählt werden" ähneln, die ich beim Versuch, von einer alten Festplatte auf die Daten zuzugreifen, erhalten habe.


0

Vielen Dank an @ this.lau_ für den / reset-Tipp. Dies ist genau das, was ich brauchte, um mein Skript zu vervollständigen, um den Besitz des CSC zu übernehmen und ein Backup davon zu erstellen. Nach der Übernahme von C: \ Windows \ CSC sind die Berechtigungen in Bezug auf die Vererbung in der Regel sehr inkonsistent - die Option / reset hat dies für mich behoben.

Function Copy-CSCData {
    $Datetime = Get-Date -Format yyyyMMdd.hhmmss
    $LogPath = 'PATH TO LOG'
    $CSCSource = 'C:\Windows\CSC\v2.0.6\namespace'
    $Dest = 'DESTINATION PATH'
    $icaclsource = "\\?\" + $CSCSource

    $CSCLogfile = "$LogPath\" + "$Datetime" + "_CSCRobocopy.log"

    icacls.exe $icaclsource /reset /T
    icacls.exe $icaclsource /grant :r "Everyone:(OI)(CI)F"

    Robocopy $CSCSource $Dest /Copy:DATSO /E /XO /Z /LOG+:$CSCLogfile /V /FP /NP /R:2 /W:2 /XF "~$*","*.tmp"
}

@Thesle Williams - Wenn Sie die Variable $ icaclsource von oben auschecken, bemerken Sie, dass ich "\? \" Vor dem Quellpfad hinzufüge. Wenn Sie dies im Vordergrund einfügen, werden längere Dateinamen akzeptiert. Dies ist auch ein Problem, das ich hatte, aber das hat es behoben! Prost.

Josh


Willkommen bei Super User! Lassen Sie Sie nur wissen, dass das "Pingen" von Benutzern nur in Kommentaren zu Posts funktioniert, nicht in den tatsächlichen Posts. Leider können Sie keine anderen Posts als Ihre eigenen oder Antworten auf Ihre Fragen kommentieren, bis Sie einen Ruf von über 50 haben . Siehe Wie funktioniert comment @replies? . Beachten Sie, dass Sie nicht einfach irgendjemanden in einem Kommentar anpingen können. Nur der Autor des Beitrags und alle anderen Benutzer, die bereits kommentiert haben.
robinCTS
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.