andreas65m
Goto Top

ACL kopierter Verzeichnisse vergleichen

Hallo,

ich muss gerade ganze Verzeichnisse von einem Laufwerk zum anderen kopieren und dabei alle Berechtigungen beibehalten.

Ich habe die Kopie per robocopy gemacht

set day=%date:~0,2%
robocopy e:\ f:\ *.* /MIR /COPY:datso /Z /mt:4 /r:0 /w:0 /NP /log:mv%day%.log /lev:1 /XD "E:\DWDocuments-old"

wollte aber nun sicherheitshalber kontrollieren.
Ich habe mir daher folgenden Skript erstellt

$acl_e=""
$acl_f=""

Get-ChildItem –Path "E:\dwfolders\" –Recurse |
Foreach-Object {
$pfad=$_.fullname
$acl_e=get-acl $pfad | select Owner,group, access, Audit, Sddl

$pfad ='F'+ $pfad.substring(1,$pfad.length-1)

$acl_f=get-acl $pfad | select Owner,group, access, Audit, Sddl

if (($acl_e -ne $acl_f) )
{
write-host $pfad
write-host $acl_e
write-host $acl_f
break
}
}

$acl_e scheint aber immer ungleich $acl_f zu sein, obwohl die ausgegebenen Strings identisch aussehen

@{Owner=VORDEFINIERT\Administratoren; Group=WOBI\Domänen-Benutzer; Access=System.Security.AccessControl.AuthorizationRuleCollection; Audit=; Sddl=O:BAG:DUD:AI(A;;FA
;;;BA)(A;ID;FA;;;BA)(A;OICIIOID;GA;;;BA)(A;ID;FA;;;SY)(A;OICIIOID;GA;;;SY)(A;ID;0x1301bf;;;AU)(A;OICIIOID;SDGXGWGR;;;AU)(A;ID;0x1200a9;;;BU)(A;OICIIOID;GXGR;;;BU)}
@{Owner=VORDEFINIERT\Administratoren; Group=WOBI\Domänen-Benutzer; Access=System.Security.AccessControl.AuthorizationRuleCollection; Audit=; Sddl=O:BAG:DUD:AI(A;;FA
;;;BA)(A;ID;FA;;;BA)(A;OICIIOID;GA;;;BA)(A;ID;FA;;;SY)(A;OICIIOID;GA;;;SY)(A;ID;0x1301bf;;;AU)(A;OICIIOID;SDGXGWGR;;;AU)(A;ID;0x1200a9;;;BU)(A;OICIIOID;GXGR;;;BU)}

Ich habe die zwei Zeilen auch online verglichen, finde aber keinen Unterschied.

Kann mir bitte jemand sagen, was ich hier falsch mache?

Danke
Andeas

Content-Key: 7591743799

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

Printed on: July 27, 2024 at 12:07 o'clock

Member: emeriks
Solution emeriks Jun 20, 2023 at 09:02:12 (UTC)
Goto Top
Hi,
am Rande: Nutze bitte Code-Tags!

$acl_e und $acl_f sind Objekte, und solche kann man nicht einfach mit "ist gleich" vergleichen.

Du musst die Eigenschaften der Objekte (Owner,group, access, Audit, Sddl) einzeln vergleichen.

E.
Member: andreas65m
andreas65m Jun 20, 2023 at 12:27:26 (UTC)
Goto Top
Zitat von @emeriks:

Hi,
am Rande: Nutze bitte Code-Tags!

$acl_e und $acl_f sind Objekte, und solche kann man nicht einfach mit "ist gleich" vergleichen.

Du musst die Eigenschaften der Objekte (Owner,group, access, Audit, Sddl) einzeln vergleichen.

E.

Hallo Emeriks,

vielen Dank für den Hinweis. Nun vergleiche ich jeweils Owner, group, Audit und sddl.
Wenn ich auch access vergleiche, dann habe ich wieder dasselbe Problem, dass dies wohl auch wieder ein Objekt ist.
Da muss ich dann wohl noch tiefer gehen.

Auf jeden Fall vielen Dank
Andreas
Member: emeriks
emeriks Jun 20, 2023 updated at 12:55:28 (UTC)
Goto Top
Was kommt raus bei ... ?

$acl_e.ToString()
$acl_f.ToString()

Vielleicht kann man einfach diese vergleichen?

if ($acl_e.ToString() -ne $acl_f.ToString() ) {
...
}


Edit:
Ich sehe gerade ...
Wenn Du SDDL dabei hast, dann reicht es doch, wenn Du dieses vergleichst?

$Quelle = $_.fullname
$Ziel ='F'+ $Quelle.substring(1,$Quelle.length-1)  

If( (get-acl $Quelle).SDDL -ne (get-acl $Ziel).SDDL) ) {
...
}
Member: Dani
Solution Dani Jun 21, 2023 at 17:35:17 (UTC)
Goto Top
Moin,
ich muss gerade ganze Verzeichnisse von einem Laufwerk zum anderen kopieren und dabei alle Berechtigungen beibehalten.
Ist es ein und das selbe Laufwerk oder sind das zwei verschiedene Laufwerke? Weil ist es ein das selbe Laufwerk (z.B. D:\ ) so kann das Standardverhalten von Windows per Registry angepasst werden. Wenn es zwei verschiedene Laufwerke sind, sollte die ACL des Zielverzeichnisses übernommen werden.


Gruß,
Dani