thorsten-rehm
Goto Top

Neues Skript, neues Glück. ACL Powershell Skript und ein paar Fragen.

Ziel: Von einem bestimmten Pfad die ACL auslesen, aber nur die Ordner (inkl. Unterordner) und nicht die Dateien.

Habe mir folgendes ausgedacht:

$dir = dir c:\temp -recurse -exclude *.*
get-acl $dir | format-list

Ergebnis:

Path   : Microsoft.PowerShell.Core\FileSystem::C:\temp\acl-test
Owner  : ZAPP\Thorsten
Group  : ZAPP\Kein
Access : Jeder Allow  ReadAndExecute, Synchronize
         VORDEFINIERT\Administratoren Allow  FullControl
         VORDEFINIERT\Benutzer Allow  Modify, Synchronize
         ZAPP\Thorsten Allow  FullControl
Audit  :
Sddl   : O:S-1-5-21-436374069-...

Path   : Microsoft.PowerShell.Core\FileSystem::C:\temp\acl-test\Neuer Ordner
Owner  : ZAPP\Thorsten
Group  : ZAPP\Kein
Access : VORDEFINIERT\Administratoren Allow  FullControl
         VORDEFINIERT\Benutzer Allow  Modify, Synchronize
         Jeder Allow  ReadAndExecute, Synchronize
         ZAPP\Thorsten Allow  FullControl
Audit  :
Sddl   : O:S-1-5-21-436374069-...
         )


Jetzt habe ich mir überlegt, dass ich das Ganze gerne gekürzt hätte auf Path, Owner, Group und Access.
Also:

$dir = dir c:\temp -recurse -exclude *.*
get-acl $dir | format-list path,owner,group,access

Ergebnis:

Path   : Microsoft.PowerShell.Core\FileSystem::C:\temp\acl-test
Owner  : ZAPP\Thorsten
Group  : ZAPP\Kein
Access : {System.Security.AccessControl.FileSystemAccessRule, System.Security.AccessControl.FileSystemAccessRule, Syste
         m.Security.AccessControl.FileSystemAccessRule, System.Security.AccessControl.FileSystemAccessRule}

Path   : Microsoft.PowerShell.Core\FileSystem::C:\temp\acl-test\Neuer Ordner
Owner  : ZAPP\Thorsten
Group  : ZAPP\Kein
Access : {System.Security.AccessControl.FileSystemAccessRule, System.Security.AccessControl.FileSystemAccessRule, Syste
         m.Security.AccessControl.FileSystemAccessRule, System.Security.AccessControl.FileSystemAccessRule}

Die Fragen:
- Was macht er denn aus Access? Wo sind meine ganzen Benutzer?
- Kann man von Path dieses "Microsoft.PowerShell.Core\FileSystem::" ausfiltern?

Ich habe noch ein paar Gedanken zu dem "ACL" Thema, aber erstmal das hier. Die Grundkenntnisse müssen einfach sitzen ;)

Danke an alle im Voraus.

Content-ID: 87517

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

Ausgedruckt am: 25.11.2024 um 06:11 Uhr

thorsten-rehm
thorsten-rehm 14.05.2008 um 18:54:38 Uhr
Goto Top
Hat niemand eine Idee? Meine Frage zu schwer oder unverständlich ;)
TuXHunt3R
TuXHunt3R 15.05.2008 um 09:00:51 Uhr
Goto Top
Hab leider gerade keine PowerShell zur Verfügung, aber was passiert bei folgendem Code:
$dir = get-childitem c:\temp -recurse -exclude *.*
get-acl $dir | select-object path,owner,group,access | format-list path,owner,group,access 
?
thorsten-rehm
thorsten-rehm 15.05.2008 um 09:28:27 Uhr
Goto Top
Leider das Gleiche.
Als würde im das Recht fehlen die ACL auszulesen, wenn man die Formatierung ändert.

Ich habe hier noch etwas gefunden, was mir aber von der Darstellung her nicht gefällt, aber vielleicht ist es der richtige Ansatz:
(die 1. Zeile des Skripts ist identisch und steht nicht dabei)
get-acl $dir | select Path -Expand Access | format-list IdentityReference,AccessControlType,FileSystemRights
thorsten-rehm
thorsten-rehm 15.05.2008 um 22:57:41 Uhr
Goto Top
Ich habe eine Lösung gefunden:

dir -recurse -exclude *.* c:\temp | get-acl | format-list path,owner,group,accesstostring

Ergebnis:
Path           : Microsoft.PowerShell.Core\FileSystem::C:\temp\acl-test
Owner          : ZAPP\Thorsten
Group          : ZAPP\Kein
AccessToString : VORDEFINIERT\Administratoren Allow  FullControl
                 NT-AUTORITÄT\SYSTEM Allow  FullControl
                 ZAPP\Thorsten Allow  FullControl
                 ERSTELLER-BESITZER Allow  268435456
                 VORDEFINIERT\Benutzer Allow  ReadAndExecute, Synchronize
                 VORDEFINIERT\Benutzer Allow  AppendData
                 VORDEFINIERT\Benutzer Allow  CreateFiles

Path           : Microsoft.PowerShell.Core\FileSystem::C:\temp\acl-test\Neuer Ordner
Owner          : ZAPP\Thorsten
Group          : ZAPP\Kein
AccessToString : VORDEFINIERT\Administratoren Allow  FullControl
                 NT-AUTORITÄT\SYSTEM Allow  FullControl
                 ZAPP\Thorsten Allow  FullControl
                 ERSTELLER-BESITZER Allow  268435456
                 VORDEFINIERT\Benutzer Allow  ReadAndExecute, Synchronize
                 VORDEFINIERT\Benutzer Allow  AppendData
                 VORDEFINIERT\Benutzer Allow  CreateFiles

Auf dieses "accesstostring" muss man erstmal kommen!

Quelle: http://www.microsoft.com/technet/scriptcenter/csc/tips/ps/acl.mspx
TuXHunt3R
TuXHunt3R 16.05.2008 um 13:15:14 Uhr
Goto Top
Da muss man wirklich erst mal drauf kommen.

Muss ich mir merken....
thorsten-rehm
thorsten-rehm 16.05.2008 um 15:24:10 Uhr
Goto Top
Jetzt würde ich gerne noch einen drauf setzen:

Das Skript soll mir die Verzeichnisse anzeigen, bei denen die Berechtigung eingetragen ist, aber nicht die Unterordner bei denen die Vererbung greift. Also mich interessiert nur der, nennen wir es mal, Knotenpunkt.
Gibt es da eine Möglichkeit? Oder so etwas wie ein Optionsschalter wie z.B. exclude "Vererbung" ...
TuXHunt3R
TuXHunt3R 16.05.2008 um 20:53:29 Uhr
Goto Top
Schau mal hier:

http://www.dotnetframework.de/lserver/CodeSampleDetails.aspx?c=4923

Ist zwar nicht grade das, was du willst, aber es ist beschrieben, wie man herausliest, ob die ACL für ein Objekt vererbt ist oder nicht. ($ACE.IsInherited)
TuXHunt3R
TuXHunt3R 16.05.2008 um 21:16:11 Uhr
Goto Top
Frage: Wenn du das Script noch erweitern willst, kannst du dann den "Gelöst"-Haken wieder rausnehmen?
thorsten-rehm
thorsten-rehm 16.05.2008 um 21:36:50 Uhr
Goto Top
Gute Frage. Ich habe den nämlich nicht gesetzt.
Ist jetzt wieder raus.
TuXHunt3R
TuXHunt3R 17.05.2008 um 00:43:06 Uhr
Goto Top
Da war wohl ein Moderator etwas übereifrig.....


Naja, kann man verstehen, viele User hier muss man explizit darauf hinweisen, dass sie den Beitrag doch bitte als "Gelöst" flagen sollen, sobald sie die Lösung haben.
thorsten-rehm
thorsten-rehm 17.05.2008 um 14:11:01 Uhr
Goto Top
Puuhh. Ich sitze gerade dran, dass mit $ACE.IsInherited einzubauen. Nicht leicht.
TuXHunt3R
TuXHunt3R 17.05.2008 um 20:11:08 Uhr
Goto Top
Tja, kann dir in diesem spezifischen Fall auch nicht weiterhelfen, hab das so auch noch nie gebraucht.
thorsten-rehm
thorsten-rehm 28.05.2008 um 10:44:30 Uhr
Goto Top
Wie kann ich eigentlich eine 1:1 Kopie der ACL machen?
$quelle01 = "C:\temp\test1"  
$ziel01 = "C:\temp\hinein"  
$acl = get-acl $quelle01
copy $quelle01 -destination $ziel01 -recurse
dir $ziel01 -recurse | set-acl -aclobject $acl

Ich hätte jetzt wie oben gedacht. Funktioniert.
Er kopiert den test1 Ordner in das Verz. "hinein" und ändert aber nicht von "hinein" die Berechtigung.
Jetzt möchte ich aber eine weitere Quelle angeben. Mit dem gleichen Ziel, also das bei "hinein" die Berechtigung nicht geändert wird, aber bei den Ordnern darunter. Die sollen aber die gleiche Berechtigung wie zuvor haben.
Da komme ich jetzt etwas ins schwanken.
Unter dem Strich möchte ich von ausgewählten Ordnern (Quellen) die Berechtigung beim Kopieren mitnehmen.

Vielleicht hier noch eine andere Darstellung, um das Ganze zu verdeutlichen:

Pfad -> Berechtigung

Quelle
temp\test1 -> User1,User2
temp\test2 -> User3,User4

Ziel
hinein\test1 -> User1,User2
hinein\test2 -> User3,User4

Eigentlich eine 1:1 Kopie. Oder sollte ich da eher mit robocopy ran?
thorsten-rehm
thorsten-rehm 31.05.2008, aktualisiert am 18.10.2012 um 18:35:46 Uhr
Goto Top
Hat sich erledigt. Habe einen anderen Weg gefunden:
ICACLS - Vererbungsproblem
DavidD
DavidD 07.09.2010 um 14:12:43 Uhr
Goto Top
Hallo,

mir wurde durch den Tip "AccessToString" geholfen, daher möchte ich mich revanchieren:
ich habe eine Lösung für die Anzeige nur der "Knotenpunkte":

dir M:\ -recurse | Where-Object {$_.psiscontainer} | where-Object {$_.System.Security.AccessControl.InheritanceFlags -ne 'ContainerInherit'} | Get-Acl | format-list path,owner,group,accesstostring > test.txt  

Grüße, David