Zum Inhalt wechseln


Foto

Berechtigungen auf Ordnerstruktu setzen - mit Ausnahmen


  • Bitte melde dich an um zu Antworten
29 Antworten in diesem Thema

#16 testperson

testperson

    Board Veteran

  • 4.511 Beiträge

 

Geschrieben 04. November 2016 - 14:36

Hi,

 

der Anfang dürfte getan sein:

# Falsch ;) Danke für den Hinweis massaraksch:
gci D:\Test -Recurse | % { Write-Host $_.FullName | Where { $_.BaseName -match "Unterordern XY" -or $_.BaseName -match "Unterordner AB" } }

# Korrgiert:
gci D:\Test -Recurse | Where { ($_.BaseName -like "Unterordner XY" -and $_.PsIsContainer) -or ($_.BaseName -like "Unterordner AB" -and $_.PsIsContainer) } | % { Write-Host $_.Name }

Einen "Musterordner" bauen und mit Get-ACL die Berechtiungen einlesen und anstatt des Write-Host dann ein Set-ACL.

https://technet.micr...powershell.aspx bzw. https://technet.micr...y/hh849802.aspx und https://technet.micr...y/hh849810.aspx

 

Viel Erfolg.

 

Gruß

Jan


Bearbeitet von testperson, 05. November 2016 - 09:22.

Good morning, that's a nice TNETENNBA!

#17 massaraksch

massaraksch

    Newbie

  • 152 Beiträge

 

Geschrieben 04. November 2016 - 19:20

Hi,

 

der where-Filter kommt da etwas spät, oder? :cry:


  • testperson gefällt das
mfg, massaraksch

#18 blub

blub

    Moderator

  • 7.605 Beiträge

 

Geschrieben 04. November 2016 - 22:37

Anaconda, sprichst du vom Read-Only Attribut, oder von einem RechteSet (ACLs)?

 

Probiers mal damit:

$Exclusions = @()
$Exclusions += "Unterordner AB"
$Exclusions += "Unterordner XY"

$RootPath = "G:\Folders"

#Set the ReadOnly-Attribut
Get-ChildItem -Path $RootPath -Exclude $Exclusions -Recursive| Set-ItemProperty -Name IsReadOnly -Value $False

#or set ACLs
$DemoFolder = "G:\demo" #die Rechte dieses Folders werden dann gesetzt
$DemoRights = get-acl $DemoFolder
Get-ChildItem -Path $Path -Exclude $Exclusions -recursive | Set-Acl $DemoRights

eventuell willst du bei Get-childitem noch den "-file" oder "-directory"  setzen, wenn du nur Files oder nur Ordner verändern willst.

 

Vorher sorgfältig im Kleinen testen, dann sollte das auch ohne Consultant abgehen smile.gif

Und bei einem großen Fileserver lass nicht alle Verzeichnisse mit einem einzigen Scriptaufruf ändern, sondern "schneide den Elefanten in Scheiben".

 

blub


Ein Kluger bemerkt alles, Ein Dummer macht über alles eine Bemerkung. (Heinrich Heine)


#19 Anaconda777

Anaconda777

    Newbie

  • 10 Beiträge

 

Geschrieben 07. November 2016 - 08:05

@blub & alle Anderen: Vielen Dank für eure Tips.

 

Habe das Script von blub leicht angepasst. Soweit funktioniert alles bis auf die Meldung (siehe unten) Die Rechte werden jedoch trotzdem gesetzt.

 

$Exclusions = @()
$Exclusions += "Unterordner AB"
$Exclusions += "Unterordner XY"

$RootPath = "E:\Ordner"

#or set ACLs
$DemoFolder = "E:\Musterordner\" #die Rechte dieses Folders werden dann gesetzt
$DemoRights = get-acl $DemoFolder

 

Get-ChildItem -Path $RootPath -Exclude $Exclusions -recurse | Set-Acl -AclObject $DemoRights
Set-Acl : Dem Prozess fehlt die für diesen Vorgang erforderliche "SeSecurityPrivilege"-Berechtigung.
In Zeile:10 Zeichen:63
+ Get-ChildItem -Path $RootPath -Exclude $Exclusions -recurse | Set-Acl -AclObject ...
+                                                               ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (E:\Kunden\Kunde1:String) [Set-Acl], PrivilegeNotHeldException
    + FullyQualifiedErrorId : System.Security.AccessControl.PrivilegeNotHeldException,Microsoft.PowerShell.Commands.SetAclCommand

 

Der Benutzer, in wessen Kontext das Script läuft, hat genügend Rechte.

 

Was habe ich übersehen?

 

Danke für euer Feedback.

 

Gruss



#20 testperson

testperson

    Board Veteran

  • 4.511 Beiträge

 

Geschrieben 07. November 2016 - 08:11

Starte die PowerShell mal "Als Administrator". Also rechte Maustaste auf die PowerShell Verknüpfung und dann "Als Administrator ausführen". Jetzt das Script darin ausführen.


Good morning, that's a nice TNETENNBA!

#21 Anaconda777

Anaconda777

    Newbie

  • 10 Beiträge

 

Geschrieben 07. November 2016 - 08:43


 

ein Problem habe ich noch, wenn in einem Unterordner die Vererbung der Rechte unterbrochen wurde, ändert das Script die Rechte auf diesen Ordner nicht.

Die Vererbung sollte überall aktiv sein ausser auf den Exclusions.

 

Danke fürs Feedback.

 

Gruss

Anaconda


Bearbeitet von Anaconda777, 07. November 2016 - 08:44.


#22 magheinz

magheinz

    Newbie

  • 1.322 Beiträge

 

Geschrieben 07. November 2016 - 08:45

Das mit der Vererbung würde ich nicht so machen. Setzte doch im root alle auf RO und nur in den Spezialfällen RW. Sie Rechte addieren sich und du musst die Vererbung nicht unterbrechen.

#23 Anaconda777

Anaconda777

    Newbie

  • 10 Beiträge

 

Geschrieben 07. November 2016 - 10:16

Aktuell ist die Vererbung auf der Ordnerstruktur nicht konsequent aktiv.

MIt dem Script möchte ich erreichen, dass auf sämtlichen Ordner RO ist ausser auf den Exclusions.

 

Wenn ich im root RO setze und vererbe müsste das Script anschliessend nur noch auf den Exclusions-Ordner RW setzen.

Ich denke es wäre sinnvoller ein Script zu machen, welches nicht ein Musterordner referenziert sondern die Rechte direkt auf den Exclusions anpasst.

 


ich habe nun eure Tips kombiniert:

 

$Schreibrechte = Get-ACL -Path E:\Musterkunde\Rechnungen

get-ChildItem -Path E:\Kunden -Recurse | Where { ($_.BaseName -like "Unterordner1" -and $_.PsIsContainer) -or ($_.BaseName -like "Unterordner2" -and $_.PsIsContainer) -or ($_.BaseName -like "Unterordner3" -and $_.PsIsContainer) } | % { Set-Acl -AclObject $Schreibrechte }

 

Die Ausgabe verlangt nun noch einen Pfad. Der Pfad sollte jedoch aus der Suche vorhin bekannt sein.

 

Cmdlet Set-Acl an der Befehlspipelineposition 1
Geben Sie Werte für die folgenden Parameter an:
Path[0]:

 

 

Danke für Inputs


Bearbeitet von Anaconda777, 07. November 2016 - 10:16.


#24 testperson

testperson

    Board Veteran

  • 4.511 Beiträge

 

Geschrieben 07. November 2016 - 10:27

Hi,

 

"-Patch $_.FullName" sollte den verlangten Pfad liefern.

 

Gruß

Jan


Good morning, that's a nice TNETENNBA!

#25 Anaconda777

Anaconda777

    Newbie

  • 10 Beiträge

 

Geschrieben 07. November 2016 - 10:46

@Jan     perfekt, so funktioniert es einwandfrei. Danke

 

Danke an @Alle Helfer

 

 

Gruss

 

Anaconda



#26 magheinz

magheinz

    Newbie

  • 1.322 Beiträge

 

Geschrieben 07. November 2016 - 11:15

Hier mal wie wir das machen

#die notwendigen Rechte
$rechte = @{}
$rechte.add('CH',@("","Synchronize,Modify","ContainerInherit,ObjectInherit","None","Allow"))
$rechte.add('FU',@("”,”FullControl”,”ContainerInherit,ObjectInherit”,”None”,”Allow”))
$rechte.add('RO',@("","ReadAndExecute",”ContainerInherit,ObjectInherit","None","Allow"))


foreach ($folder  in Get-ChildItem('\\data.FOOBAR\data\') -Directory)
{
    #ACL bereinigen
    $acl = get-acl -path "\\data.FOOBAR\data\Abteilungen\S\$folder"
    $foo = $acl.Access | %{$acl.RemoveAccessRule($_)}
    $foo = Set-Acl "\\data.FOOBAR\data\Abteilungen\S\$folder" $acl

    #neue ACL setzen
    $acl = get-acl -path "\\data.FOOBAR\data\Abteilungen\S\$folder"


    foreach ($recht in "RO","CH","FU")
    {
        $GruppeL = 'DAT_L_data_'+"$folder"+'_'+"$recht"
        "$GruppeL"
        New-ADGroup -Name $GruppeL -GroupCategory Security -GroupScope domainlocal -Path "ou=,ou=Gruppen,dc=FOOBAR"

        $rechte[$recht][0] = $GruppeL
        $accessRule = new-object System.Security.AccessControl.FileSystemAccessRule($rechte[$recht])
        $foo = $acl.AddAccessRule($accessRule)
    }
    $foo = Set-Acl "\\data.FOOBAR\data\$folder" $acl
}

Da musst du nur entsprechend Filtern wo dir Rechte gesetzt werdens sollen.

Ohne Musterordner oder ähnliches.

Die eigentliche Rechtevergabe geht dann über die AD-Gruppen. Das ist dann sauber und übersichtlich.

DIe OUs und Pfade müssen natürlich stimmen.


Bearbeitet von magheinz, 07. November 2016 - 11:16.


#27 Jim di Griz

Jim di Griz

    Board Veteran

  • 828 Beiträge

 

Geschrieben 07. November 2016 - 19:49

hier gab es das problem das viele admins staendig rechte auf mehrere 1000 ordner mit mehreren millionen dateien gesetzt haben.

immer schoen besitz uebernehmen auf alles.

daher die liebe zu (leeren) Musterbäumen.


2152 MCP 2000 Server, 70-410, 70-411, 70-412, 70-413, 70-414, 70-

Lizenzen : vse msdn abo


#28 blub

blub

    Moderator

  • 7.605 Beiträge

 

Geschrieben 07. November 2016 - 21:59

Aktuell ist die Vererbung auf der Ordnerstruktur nicht konsequent aktiv.

 

 

Wenn du konsequente Vererbung haben willst, dann modifiziere die $ACL mit der Methode "SetAccessRuleProtection"

$Path="C:\Demo"
$ACL = Get-Acl $DirectoryPath
 
$ACL.SetAccessRuleProtection($True, $True)

(ich habs jetzt nur sehr schnell mal getestet!)

 

bischen in der MSDN stöbern

https://msdn.microso...(v=vs.110).aspx

 

 

Viele Wege führen nach Rom!

 

blub


Ein Kluger bemerkt alles, Ein Dummer macht über alles eine Bemerkung. (Heinrich Heine)


#29 magheinz

magheinz

    Newbie

  • 1.322 Beiträge

 

Geschrieben 08. November 2016 - 07:46

hier gab es das problem das viele admins staendig rechte auf mehrere 1000 ordner mit mehreren millionen dateien gesetzt haben.
immer schoen besitz uebernehmen auf alles.
daher die liebe zu (leeren) Musterbäumen.


Es kommt natürlich immer auf den Anwendungsfall an.
Bei uns werden Ordner Mit Berechtigungen IMMER durch ein Powershellscript erzeugt. Dabei werden auch immer die Domainlokalen Gruppen gebaut. Ein Admin muss sich dann nur zum Mitglied von dat_l_foobar_FU machen und hat adminrechte.
Das Rechte setzen geschieht genau ein mal. Danach ist es nur noch eine Frage der Gruppenberechtigungen ws man sogar problemlos delegieren kann.

#30 Jim di Griz

Jim di Griz

    Board Veteran

  • 828 Beiträge

 

Geschrieben 08. November 2016 - 22:23

jojo, alles bekannt und wurde bis auf powershell auch so umgesetzt. es gab auch keine aenderungen mehr an ntfs-rechten für ca. 18 Monate.

dann kam jedoch der wunsch auf (und aus diesem wunsch wurde ein auftrag) mitten in diesem meer an daten eine ganz neue struktur zu schaffen nach anderen schemata mit gänzlich anderen zwecken.

warum mittendrin? keine ahnung, musste so sein, hiess es. Alles Klagen hatte keinen Zweck.

wenn ich da erstmal anfang zu erzaehlen hoer ich nicht mehr auf :-)


Bearbeitet von Jim di Griz, 08. November 2016 - 22:29.

2152 MCP 2000 Server, 70-410, 70-411, 70-412, 70-413, 70-414, 70-

Lizenzen : vse msdn abo