Jump to content

InheritanceFlag (Powershell)?


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Geschrieben

Hallo,

 

ich bastel gerade an einem Script zum anlegen der Ordnerstruktur für unserer Server.

Mit dem Script möchte ich nun auch die Berechtigungen für die angelegten Verzeichnisse auf dem Server setzen. Dazu hab ich im Intenet etwas gesucht und ein Beispiel Script gefunden was das für mich macht. Ich habe das Script etwas auf meine Bedürfnisse angepasst und sieht nun wie folgt aus:

 

function FunSetACL {

param([string]$DirectoryPath, [string]$IdentityRef, [string]$Right)

 Write-Host "Directory:   $DirectoryPath"
 Write-Host "IdentityRef: $IdentityRef"
 Write-Host "Rights:      $Right"



 if (Test-Path -path $DirectoryPath) {

   switch ($Right) {
 		list {$FileSystemRights = [system.Security.AccessControl.FileSystemRights]"ListDirectory, ReadAttributes, ReadExtendedAttributes, ReadPermissions, Traverse"}
 		read {$FileSystemRights = [system.Security.AccessControl.FileSystemRights]"read"}
 		write {$FileSystemRights = [system.Security.AccessControl.FileSystemRights]"write"}
 		change {$FileSystemRights = [system.Security.AccessControl.FileSystemRights]"change"}
 		chmod {$FileSystemRights = [system.Security.AccessControl.FileSystemRights]"ListDirectory, ReadAttributes, ReadExtendedAttributes, ReadPermissions, Traverse"}
 		full {$FileSystemRights = [system.Security.AccessControl.FileSystemRights]"FullControl"}
  }


   $InheritanceFlag1 = [system.Security.AccessControl.InheritanceFlags]::ObjectInherit
   $InheritanceFlag2 = [system.Security.AccessControl.InheritanceFlags]::ContainerInherit
   $InheritanceFlag=$InheritanceFlag1 -bor $InheritanceFlag2

   # http://msdn.microsoft.com/de-de/library/system.security.accesscontrol.propagationflags
   # None               - Gibt an, dass keine Vererbungsflags festgelegt sind.
 	# NoPropagateInherit - Gibt an, dass der ACE nicht an untergeordnete Objekte weitergegeben wird.
 	# InheritOnly        - Gibt an, dass der ACE nur an untergeordnete Objekte weitergegeben wird. Dies schließt untergeordnete Container- und Endobjekte ein. 
   $PropagationFlag = [system.Security.AccessControl.PropagationFlags]::InheritOnly

   $AccessControlType =[system.Security.AccessControl.AccessControlType]::Allow
   $User = New-Object System.Security.Principal.NTAccount($IdentityRef)

   $ACE = New-Object System.Security.AccessControl.FileSystemAccessRule($User, $FileSystemRights, $InheritanceFlag, $PropagationFlag, $AccessControlType)
   $ACL = Get-ACL $DirectoryPath
   $ACL.AddAccessRule($ACE)

   Set-ACL $DirectoryPath $ACL
 } else {
 	Write-Host "Folder existiert nicht"
 }
}

FunSetACL "C:\temp\srv2k3test\dat\pub" "Domain\Peter.Pan" "full"

 

Eigentlich funktioniert das Script soweit schon ganz gut. Ich habe nur Schwierigkeiten mit dem InheritanceFlags.

Wenn das Script abläuft werden die von mir gewünschten Rechte gesetzt aber nur für "Unterordner und Dateien". Ich möchte die Rechte aber für "Diesen Ordner, Unterordner und Dateien" setzen. Ich verstehe einfach nicht wie ich die Flags kombinieren soll damit das dabei raus kommt.

 

Kann mir da jemand einen Tip geben?

 

Gruß

 

AS

Geschrieben

Hallo astalbold,

 

zu aller erst würde ich Dir empfehlen mit dem NTFSSecurity Modul aus dem Script Center von Mircosoft zu arbeiten. Das macht das Leben viel leichter.

Das Modul findest du hier (v1.3)

 

Mit deinem Script hast du keine "saubere" Berechtigung, sondern du berechtigst einzeln.

 

Hier ein Beispiel wie einfach das mit dem Modul geht:

$path = "C:\temp\srv2k3test\dat\pub"
$acc = "Domain\Peter.Pan"
Get-Item $path | Add-Ace -Account $acc -AccessRights FullControl -InheritanceFlags ContainerInherit,ObjectInherit -AccessType Allow

Geschrieben

Hallo ducke,

 

danke für den Tipp. Ich muss mal schauen ob ich das Modul eingebunden bekomme an der Stelle wo das Script laufen soll. Werde das diese Woche testen.

 

Aber nach den ersten Blicken auf das Modul, besteht dort mein Problem mit den InheritanceFlag weiterhin. In deinem Beispiel kombinierst du InheritanceFlags (ContainerInherit,ObjectInherit) genauso wie ich in einem Script. Demnach dürften die Rechte doch auch nur für "Unterordner und Dateien" gesetzt werden.

Da stehe ich wieder vor dem Problem wie ich die Flags kombinieren muss das sie für "Diesen Ordner, Unterordner und Dateien" gilt? Oder versteh ich das alles falsch... :D

Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...