kazuonio
Goto Top

Berechtigungsstruktur auf anderen Server kopieren PowerShell

Wir besitzen einen File-Server welchen wir durch einen neuen ersetzen möchten. Wir haben ein Tool mit welchem wir alle Daten hinüberschieben können, aber dieses übernimmt keine Berechtigunen.

Ich bräuchte also nur ein PowerShell Skript, welches am besten nach angabe eines Datenträgers/Partition (also "C:\" oder "D:\") die Dateiberechtigungen von allen Ordnern und Unterordner sowie Dateien kopieren und bei einem anderen angegeben Server setzen kann.

Andere Tools dürfen wir nicht verwenden, ich habe leider nicht so viel Ahnung von PowerShell.

Content-Key: 3197331117

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

Printed on: February 23, 2024 at 20:02 o'clock

Member: emeriks
emeriks Jun 28, 2022 updated at 07:13:21 (UTC)
Goto Top
Hi,
schau mal Robocopy. Das kopiert Daten und Berechtigungen.
Das ist bei Windows dabei.

E.
Member: killtec
killtec Jun 28, 2022 updated at 07:13:30 (UTC)
Goto Top
Hi,
hast du schon mal Robocopy versucht? Ist im System vorhanden. Da die Option /SEC nutzen. Sollte soweit klappen.
/edit: @emeriks war schneller ;)

Gruß
Member: Kazuonio
Kazuonio Jun 28, 2022 at 07:15:24 (UTC)
Goto Top
Ahh vielen Dank, dann werde ich mir Robocopy mal anschauen.
Member: Kazuonio
Kazuonio Jun 28, 2022 updated at 08:49:08 (UTC)
Goto Top
Ich war gerade in der Pause weswegen es ein wenig gedauert hat.
Ich habe ein kleines Skript erstellt. Weil wir es für verschiedene Pfade brauchen, wollte ich, dass man nicht immer im Skript den Pfad umschreiben muss.

cls
while($true){
    $copypfad = Read-Host "Bitte geben Sie der zu kopierende Pfad ein "  
    if(!(Test-Path $copypfad)){
        write-host "Path does not exists, repeat your entry." -F Red  
    }else{break}
}

while($true){
    $pastepfad = Read-Host "Geben Sie den Ziel Pfad ein"  
    if(!(Test-Path $pastepfad)){
        write-host "Target path does not exists, repeat your entry." -F Red  
    }else{break}
}

Try{
    robocopy $copypfad $pastepfad /e /copy:ATSOU /dcopy:AT
}catch {
    throw $_.Exception.Message
}

Weil das meiste in diesem Skript nichts mit meiner Frage zu tun hat, hier den Befehl um welchen es geht:

  robocopy $copypfad $pastepfad /e /copy:ATSOU /dcopy:AT 

Ich habe den Befehl schon ausgeführt und etwas festgestellt.

Anforderungen:
1. Es soll die ganze Berechtigunsstruktur des ganzen Pfades angegeben werden
2. Man sollte den Pfad von einem anderen Server angeben können
3. Es sollen keine Dateien oder Ordner mitkopiert werden

Was geschah:
1. Die Ordner Berechtigung wurde nicht übernommen (es wurden nur die Berechtigungen der Dateien übernommen)
2. Wenn ein Ordner fehlt, wird dieser erstellt, obwohl ich möchte, dass keine Dateien oder Ordner erstellt werden (es sollte nur die Berechtigungsstruktur übernommen werden)

Kann mir jemand weiterhelfen?

Edit: Habe gerade gesehen, dass das kopieren der Ordner wohl an der option "/e" liegt.

Dann besteht nur noch das Problem der nicht übernommenen Berechtigungen der Verzeichnisse/Ordner.
Member: Crusher79
Solution Crusher79 Jun 28, 2022 at 08:52:26 (UTC)
Goto Top
Ohne kopieren geht sowas auch.

https://blog.netwrix.com/2018/04/18/how-to-manage-file-system-acls-with- ...

Du kannst mit PS auch Berechtigungen so setzen.... Mit entsrpechenden Code die sichern und woanders ausrollen.
Member: NetzwerkDude
Solution NetzwerkDude Jun 28, 2022 at 08:57:04 (UTC)
Goto Top
Für Berechtigungen bietet Windows das icacls tool an:
https://docs.microsoft.com/de-de/windows-server/administration/windows-c ...

Denke die Beispiele machen klar wie das funktioniert face-smile
Member: Crusher79
Crusher79 Jun 28, 2022 updated at 09:03:04 (UTC)
Goto Top
Oder für die ganz faulen mit GUI: https://helgeklein.com/setacl-studio/feature-set/

Hatte sowas vor Jahren mal. Für einmalige Aktionen ohne Scripting vlt. nicht verkehrt.

Laut Author "Freeware". Verfehlt zwar PS als Topic. Aber wollt es nochmal erwähnt haben.
Member: departure69
departure69 Jun 28, 2022 at 09:15:38 (UTC)
Goto Top
Es gibt ein offizielles Fileserver-Umzugs-Tool von Microsoft. Da sollten keine Wünsche offenbleiben.

Hier ist es gut beschrieben:

https://www.windowspro.de/marcel-kueppers/file-server-storage-migration- ...


Viele Grüße

von

deoparture69
Member: ukulele-7
ukulele-7 Jun 28, 2022 at 09:38:32 (UTC)
Goto Top
Ich hab meinen Fileserver neulich mit der Datensicherung umgezogen. Einen aktuellen Job und dann einen Restore inkl. Rechte.
Member: user217
user217 Jun 28, 2022 at 11:25:18 (UTC)
Goto Top
uralt synctoy aber geht
Member: Kazuonio
Kazuonio Jun 28, 2022 at 11:49:03 (UTC)
Goto Top
Ich habe jetzt mit icacls ein Skript geschrieben:

CLS
While($true){
    $copypfad = Read-Host "Bitte geben Sie den zu kopierende Pfad ein "  
    If(!(Test-Path $copypfad)){
        Write-Host "Path does not exists, repeat your entry." -F Red  
    }else{break}
}

While($true){
    $pastepfad = Read-Host "Geben Sie den Ziel Pfad ein"  
    if(!(Test-Path $pastepfad)){
        Write-Host "Target path does not exists, repeat your entry." -F Red  
    }else{break}
}

While($true){
    $aclfile = Read-Host "Geben Sie den Pfad + Dateinamen für die temporäre Zwischenspeicherung der Berechtigungen ein."  
    if(Test-Path $aclfile){
        Write-Host "File does exists, repeat your entry." -F Red  
    }else{break}
}

Try{
    Icacls $copypfad /save $aclfile /t /c
    Icacls $pastepfad /restore $aclfile /t /c
    Remove-Item $aclfile
}catch {
    throw $_.Exception.Message

Ich habe es kurz getestet und es funktioniert soweit.
Hier wieder die eigentlich wichtigen Zeilen vom Skript:

    Icacls $copypfad /save $aclfile /t /c
    Icacls $pastepfad /restore $aclfile /t /c
    Remove-Item $aclfile

Ich danke euch für all eure Vorschläge.
Wie findet ihr diese Lösung? Kann ich die so einsetzen (inklusive Anleitung im unserem internen Wiki)?
Mitglied: 3063370895
3063370895 Jun 28, 2022 at 15:03:49 (UTC)
Goto Top
Anstelle von
While($true)
und danach Test-Path kannst du auch direkt
while(!(Test-path $path)){
verwenden