blackhawk17
Goto Top

Robocopy rechte im Ordner hinzufügen und nicht ersetzen

Hallo zusammen,

ich plane den Umzug eines Fileservers auf einen neuen Fileserver.

Hierzu soll sich das Berechtigungskonzept ebenfalls ändern.

Was ich gerne möchte ist, dass z.B. Robocopy die Ordner den alten Servers auf den neuen Server kopiert und synchronisiert und die Berechtigungen vom alten Ordner auf den neuen Ordner hinzufügt und nicht ersetzt und alles was neu vererbt wurde ersetzt.

C:\Windows\system32>robocopy.exe \\file01\share$\OrdnerA F:\Shares\Archiv\OrdnerA /mir /B /E /W:5 /R:1 /DCOPY:T

Ich könnte nun natürlich /copyall hinzufügen, dieser würde dann aber die Berechtigung vom alten Server nehmen und auf dem neuen Server ersetzen.

Das möchte ich allerdings nicht, da die alten Berechtigungen erstmal nur hinzugefügt werden sollen.

Leider finde ich so eine Möglichkeit mein Vorhaben umzusetzen.

Hat jemand von Euch eine Idee dazu?

Content-ID: 350599

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

Ausgedruckt am: 17.11.2024 um 01:11 Uhr

emeriks
emeriks 02.10.2017 um 16:35:59 Uhr
Goto Top
Hi,
mit Robocopy und Konsorten geht das nicht. Das müsste man extra scripten. Mit Powershell z.B.

E.
Penny.Cilin
Penny.Cilin 02.10.2017 um 16:54:10 Uhr
Goto Top
hallo,

soweit ich weiß, konnte man mit
robocopy <quelle> <ziel> /xn /xo /xc
die Berechtigungen übernehmen.
Leider hat Microsoft den TechNetartikel nicht mehr online.

Gruss Penny
emeriks
emeriks 02.10.2017 um 17:02:17 Uhr
Goto Top
Zitat von @Penny.Cilin:
soweit ich weiß, konnte man mit
robocopy <quelle> <ziel> /xn /xo /xc
die Berechtigungen übernehmen.
Leider hat Microsoft den TechNetartikel nicht mehr online.
/XC :: Schließt geänderte Dateien aus.
/XN :: Schließt neuere Dateien aus.
/XO :: Schließt ältere Dateien aus.
Es wurde doch gefragt, die einzelnen ACEs in den ACLs zu mischen. So habe ich es jedenfalls verstanden.
Penny.Cilin
Penny.Cilin 02.10.2017 um 17:04:28 Uhr
Goto Top
Zitat von @emeriks:

Zitat von @Penny.Cilin:
soweit ich weiß, konnte man mit
robocopy <quelle> <ziel> /xn /xo /xc
die Berechtigungen übernehmen.
Leider hat Microsoft den TechNetartikel nicht mehr online.
> /XC :: Schließt geänderte Dateien aus.
> /XN :: Schließt neuere Dateien aus.
> /XO :: Schließt ältere Dateien aus.
Es wurde doch gefragt, die einzelnen ACEs in den ACLs zu mischen. So habe ich es jedenfalls verstanden.
Genau das machen die Parameter. Es werden keine Dateien kopiert, sondern nur die Berechtigungen.
Penny.Cilin
Penny.Cilin 02.10.2017 um 17:06:11 Uhr
Goto Top
Sorry muss mich korrigieren.

Hier der Artikel So verwenden Sie Robocopy zum Kopieren von Sicherheitsinformationen, ohne andere Dateidaten zu kopieren

robocopy Quelle Ziel /secfix /xo /xn /xc
blackhawk17
blackhawk17 02.10.2017 um 17:14:33 Uhr
Goto Top
Hallo,

nein das trägt nicht zum erreichen des Ziels bei und ist das gleiche wie das was ich schon mit /copyall mache.

Es wird nur die Berechtigung kopiert. Alle anderen Berechtigungen, welche auf dem Ordner auf dem Ziel bereits gesetzt sind, werden gelöscht.
emeriks
emeriks 02.10.2017 um 17:17:42 Uhr
Goto Top
Es wird nur die Berechtigung kopiert. Alle anderen Berechtigungen, welche auf dem Ordner auf dem Ziel bereits gesetzt sind, werden gelöscht.

Also Du willst

Vorher:
Quelle: Datei1 --> Admins Vollzugriff, Benutzer Lesen, Peter ändern
Ziel: Datei1 --> Admins Vollzugriff, Benutzer Lesen, Hans ändern

Hinterher:
Ziel: Datei1 --> Admins Vollzugriff, Benutzer Lesen, Hans ändern, Peter ändern

Korrekt? Falls ja: Geht nicht mit Robocopy.
blackhawk17
blackhawk17 02.10.2017 um 17:23:25 Uhr
Goto Top
genau das will ich erreichen face-smile
blackhawk17
blackhawk17 02.10.2017 um 18:02:07 Uhr
Goto Top
Habe da evtl. etwas gefunden, was weiterhelfen könnte:

Set-StrictMode -Version "2.0"
Clear-Host

$DirectoryPath_org="c:\temp\homes\homeuser001"
$DirectoryPath_dest="c:\temp\homes\homeuser002"

$ACL=Get-Acl $DirectoryPath_org
Set-Acl -path $DirectoryPath_dest -AclObject $ACL

  1. Kopieren der Berechtigungen über eine Pipe
  2. Get-Acl $DirectoryPath_org | $DirectoryPath_dest

Das Problem ist nur, dass er auch den OWNER des Ordners ersetzen will und das läuft dann auf einen Fehler. Der Owner soll natürlich nicht ersetzt werden.
colinardo
colinardo 02.10.2017, aktualisiert am 05.10.2017 um 08:12:35 Uhr
Goto Top
$source = 'c:\temp\homes\homeuser001'  
$target = 'c:\temp\homes\homeuser002'  
gci $source -Directory -Recurse | %{
    $targetDir = $_.FullName.toLower().Replace($source.ToLower(),$target)
    if(Test-Path $targetDir){
        $aclTarget = Get-ACL $targetDir
        (Get-ACL $_.Fullname).Access | ?{!$_.IsInherited} | %{$aclTarget.SetAccessRule($_)}
        write-host "Setting permission on '$targetDir' ..." -F Green  
        Set-ACL $targetDir $aclTarget
    }
}
Grüße Uwe
blackhawk17
blackhawk17 04.10.2017 um 16:47:39 Uhr
Goto Top
Hallo Uwe,
dein für dein tolles Skript face-smile.
Aber irgendwie funktioniert es nicht.

Bei mir macht es einfach gar nichts.
Penny.Cilin
Penny.Cilin 04.10.2017 um 16:54:51 Uhr
Goto Top
Du weißt schon, daß Du das Skript mit administrativen Berechtigungen ausführen mußt?

Bekommst Du eine Fehlermeldung?
blackhawk17
blackhawk17 04.10.2017 um 17:08:21 Uhr
Goto Top
Hi
ja das ist mir bekannt.
Nein ich bekomme auch keine Fehlermeldung.
Das Skript läuft einfach durch ohne irgendeine Rückmeldung aber an den Berechtigungen tut sich gar nichts.

Es ist als wäre nichts gewesen.
colinardo
colinardo 05.10.2017 aktualisiert um 08:16:19 Uhr
Goto Top
Geht einwandfrei, wurde hier getestet.
Zielpfade und die Rechte werden natürlich nur bearbeitet wenn es den entsprechenden Unterordner auch im Ziel gibt. Übertragen werden nur explizit auf die Ordner vergebene Rechte, sieht man ja am Code am Where Filter.
blackhawk17
blackhawk17 05.10.2017 um 17:07:39 Uhr
Goto Top
Was mache ich denn da nun Falsch:

Powershell ISE ist als Admin gestartet.

Ausgabe schaut so aus: (siehe Bild)

Es kommt keine Rückgabe, es kommt kein Fehler, gar nichts.

Ich habe jetzt mal absichtlich den Pfad so geändert, dass ein Fehler kommen muss, da es den Pfad gar nicht gibt aber wie man sieht kommt da nix.
ps
colinardo
colinardo 05.10.2017 aktualisiert um 17:22:39 Uhr
Goto Top
Anzugeben sind die Oberordner in denen sich jeweils die exakt gleiche Baumstruktur befindet, denn wie du siehst werden nur Unterordner der Quelle verarbeitet
gci $source -Directory -Recurse
Verarbeitete Unterordner werden dann aufgelistet.
Und der abschließende Backslash in der Variablen $target darf ebenfalls dort nicht stehen.
Das dein Account in allen Strukturen Rechte ändern können muss, müssen wir ja nicht wiederholen.
blackhawk17
blackhawk17 05.10.2017 um 18:05:52 Uhr
Goto Top
ah jetzt verstehe ich warum das nicht geht.

Leider kann ich das Script dann doch nicht gebrauchen.

Da Quelle und Ziel ja unterschiedlich sind nur das was kopiert wird zum Ziel dann ja wieder die gleiche Struktur hat.

Trotzdem vielen Dank face-smile
colinardo
colinardo 05.10.2017 aktualisiert um 18:13:50 Uhr
Goto Top
Öhm, du wolltest doch nur die Rechte auf die Ordner von der Quelle auf das Ziel übertragen?! Wie stellst du dir vor soll das funktionieren wenn die Struktur im Ziel nicht gleich ist??
blackhawk17
blackhawk17 06.10.2017 um 11:49:23 Uhr
Goto Top
Hallo zusammen,

ich habe jetzt eine Lösung für das Problem gefunden

xcopy quelle ziel /S /E /O /I

Die Quelle wäre dann z.B. \\fs01\Dokumente\Word

Das Ziel \\FS02\firmaA\Dokumente\Word

Alle Berechtigungen, die auf dem Ordner Word liegen werden übertragen und zwar nur Hinzugefügt zu den bereits bestehenden und nicht ersetze.
Bei meinen Test werden auch alle Berechtigungen der Ordner übertragen, welche noch nach dem Ordner Word kommen.

Genauso sollte das aussehen.

Trotzdem vielen Dank an Euch und die Mühe face-smile.
emeriks
emeriks 06.10.2017 aktualisiert um 12:56:18 Uhr
Goto Top
ich habe jetzt eine Lösung für das Problem gefunden
xcopy quelle ziel /S /E /O /I
Sorry, aber das ist Quatsch! Du täuschst Dich selbst oder willst was anderes erreichen, als Du hier formuliert hast.
Ich habe das eben nachgestellt. Der von Dir genannte Befehl kopiert eine Datei erneut (er fragt sogar explizit danach!) und zwar incl. der ACL. Die ACL des Ziels wird also nicht um die ACEs der Quelle ergänzt (Deine formlulierte Anforderung) sondern das Ziel wird verworfen, neu kopiert und bekommt auch eine neue ACL, nämlich eine Kopie der ACL der Quelle.

Edit:
Meine Glaskugel hat gerade gesprochen ...
Es sein denn, Du hast Deine Anforderung vollkommen falsch formuliert und es kommt Dir statt dessen darauf an, dass Dateien beim Kopieren nicht die Berechtigungen des Zielordners erben sollen sondern jene behalten sollen, welche sie an der Quelle haben. In diesem Sinne also "hinzufügen" von Berechtigungen.
colinardo
colinardo 06.10.2017 um 12:51:54 Uhr
Goto Top
Zitat von @emeriks:
ich habe jetzt eine Lösung für das Problem gefunden
xcopy quelle ziel /S /E /O /I
Sorry, aber das ist Quatsch!
Dito.
blackhawk17
blackhawk17 06.10.2017 um 14:05:38 Uhr
Goto Top
mmmh ok dann habe ich mich wohl falsch ausgedrückt.

Ja es soll so sein, dass die Rechte der Quelle an das Ziel übertragen werden.

Und das klappt damit super.
emeriks
emeriks 06.10.2017 um 14:33:27 Uhr
Goto Top
Dann hast Du aber hier
Zitat von @blackhawk17:
genau das will ich erreichen face-smile
sehr irreführend geantwortet!
Penny.Cilin
Penny.Cilin 06.10.2017 um 17:51:17 Uhr
Goto Top
Hm, täusche ich mich, oder macht das
robocopy <quelle> <ziel> /s /e /secfix /xn /xc /xo
nicht auch?
emeriks
emeriks 06.10.2017 um 18:46:55 Uhr
Goto Top
Du täuschst Dich. face-wink