obtener help comandos comando ayuda powershell permissions file-permissions

help - obtener ayuda de un comando powershell



Establecer indicadores de herencia y propagación con set-acl y powershell (5)

Aquí está la página de MSDN que describe las banderas y cuál es el resultado de sus diversas combinaciones.

Flag combinations => Propagation results ========================================= No Flags => Target folder. ObjectInherit => Target folder, child object (file), grandchild object (file). ObjectInherit and NoPropagateInherit => Target folder, child object (file). ObjectInherit and InheritOnly => Child object (file), grandchild object (file). ObjectInherit, InheritOnly, and NoPropagateInherit => Child object (file). ContainerInherit => Target folder, child folder, grandchild folder. ContainerInherit, and NoPropagateInherit => Target folder, child folder. ContainerInherit, and InheritOnly => Child folder, grandchild folder. ContainerInherit, InheritOnly, and NoPropagateInherit => Child folder. ContainerInherit, and ObjectInherit => Target folder, child folder, child object (file), grandchild folder, grandchild object (file). ContainerInherit, ObjectInherit, and NoPropagateInherit => Target folder, child folder, child object (file). ContainerInherit, ObjectInherit, and InheritOnly => Child folder, child object (file), grandchild folder, grandchild object (file). ContainerInherit, ObjectInherit, NoPropagateInherit, InheritOnly => Child folder, child object (file).

Para que aplique los permisos al directorio, así como a todos los directorios y archivos secundarios recursivamente, querrá usar estos indicadores:

InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit PropagationFlags.None

Entonces, el cambio de código específico que debe hacer para su ejemplo es:

$PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None

Intento imitar la acción de hacer clic derecho en una carpeta, configurar "modificar" en una carpeta y hacer que los permisos se apliquen a la carpeta y subcarpetas y archivos específicos.

Casi siempre estoy usando Powershell, sin embargo, la herencia solo se establece como "subcarpetas y archivos" en lugar de "toda esta carpeta, subcarpetas y archivos".

¿Hay algún indicador no listado para System.Security.AccessControl.PropagationFlags que establecerá esto correctamente?

Esto es lo que estoy trabajando hasta ahora.

$Folders = Get-childItem c:/TEMP/ $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::InheritOnly $objType = [System.Security.AccessControl.AccessControlType]::Allow foreach ($TempFolder in $Folders) { echo "Loop Iteration" $Folder = $TempFolder.FullName $acl = Get-Acl $Folder $permission = "domain/user","Modify", $InheritanceFlag, $PropagationFlag, $objType $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission $acl.SetAccessRule($accessRule) Set-Acl $Folder $acl }


Aquí hay un código sucinto de Powershell para aplicar nuevos permisos a una carpeta al modificar su ACL existente (Lista de control de acceso).

# Get the ACL for an existing folder $existingAcl = Get-Acl -Path ''C:/DemoFolder'' # Set the permissions that you want to apply to the folder $permissions = $env:username, ''Read,Modify'', ''ContainerInherit,ObjectInherit'', ''None'', ''Allow'' # Create a new FileSystemAccessRule object $rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permissions # Modify the existing ACL to include the new rule $existingAcl.SetAccessRule($rule) # Apply the modified access rule to the folder $existingAcl | Set-Acl -Path ''C:/DemoFolder''

Cada uno de los valores en la lista de variables $permissions pertenece a los parámetros de este constructor para la clase FileSystemAccessRule .

Cortesía de esta página .


Aquí hay una tabla para ayudar a encontrar las banderas requeridas para diferentes combinaciones de permisos.

╔═════════════╦═════════════╦═══════════════════════════════╦════════════════════════╦══════════════════╦═══════════════════════╦═════════════╦═════════════╗ ║ ║ folder only ║ folder, sub-folders and files ║ folder and sub-folders ║ folder and files ║ sub-folders and files ║ sub-folders ║ files ║ ╠═════════════╬═════════════╬═══════════════════════════════╬════════════════════════╬══════════════════╬═══════════════════════╬═════════════╬═════════════╣ ║ Propagation ║ none ║ none ║ none ║ none ║ InheritOnly ║ InheritOnly ║ InheritOnly ║ ║ Inheritance ║ none ║ Container|Object ║ Container ║ Object ║ Container|Object ║ Container ║ Object ║ ╚═════════════╩═════════════╩═══════════════════════════════╩════════════════════════╩══════════════════╩═══════════════════════╩═════════════╩═════════════╝

Entonces, como dijo David, querrás

InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit PropagationFlags.None


Creo que tu respuesta se puede encontrar en esta página . De la página:

Esta carpeta, subcarpetas y archivos:

InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit PropagationFlags.None


Solo porque estás en PowerShell no te olvidas de los buenos viejos. A veces pueden proporcionar la solución más fácil, por ejemplo:

icacls.exe $folder /grant ''domain/user:(OI)(CI)(M)''