HOWTO · PowerShell

Establecimiento recursivo de permisos en carpetas mediante PowerShell

Este tutorial le enseñará a establecer permisos recursivamente en carpetas en PowerShell.

En esta página

Una ACL (lista de control de acceso) representa los permisos de los usuarios y los grupos de usuarios para acceder a un archivo o recurso. Es una lista ordenada de entradas de control de acceso (ACE).

Cada ACE en una ACL define los derechos de acceso permitidos, denegados o auditados. El descriptor de seguridad de un objeto puede tener dos tipos de ACL: DACL y SACL.

Cuando trabaje con permisos NTFS en Windows, es posible que deba cambiar recursivamente los permisos en las carpetas. Una GUI requeriría más tiempo y sería más compleja que un script de PowerShell.

Este tutorial le enseñará a establecer permisos recursivamente en carpetas usando PowerShell.

Obtenga permisos en las carpetas de forma recursiva usando PowerShell

Existen principalmente dos cmdlets para administrar los permisos de ACL en PowerShell: Get-Acl y Set-Acl.

El cmdlet Get-Acl obtiene el descriptor de seguridad que contiene las listas de control de acceso (ACL) de un archivo o recurso.

El Get-Acl obtiene el descriptor de seguridad del directorio C:\New.

Get-Acl C:\New

Producción :

Directory: C:\
Path Owner          Access
---- -----          ------
New  DelftStack\rhntm BUILTIN\Administrators Allow  FullControl...

El cmdlet Get-Acl no devuelve todos los permisos de directorios y subdirectorios. Deberá usar el cmdlet Get-ChildItem con el parámetro -Recurse para obtener permisos de carpetas de forma recursiva.

Get-ChildItem "C:\pc" -Recurse | Get-ACL

Establecer permisos en carpetas de forma recursiva mediante PowerShell

El Set-Acl cambia el descriptor de seguridad de un archivo o recurso. Aplica el descriptor de seguridad suministrado como valor del parámetro -AclObject.

Los siguientes comandos copian los valores del descriptor de seguridad del directorio C:\New al descriptor de seguridad del directorio C:\pc.

$new = Get-Acl -Path "C:\New"
Set-Acl -Path "C:\pc" -AclObject $new

El primer comando obtiene el descriptor de seguridad del directorio C:\New y lo almacena en la variable $new. En el segundo comando, Set-Acl cambia los valores en la ACL del directorio C:\New a los valores en $new.

La siguiente secuencia de comandos agrega la nueva regla ACL a los permisos existentes en la carpeta de forma recursiva.

$acl = Get-Acl -Path "C:\pc"
$ace = New-Object System.Security.Accesscontrol.FileSystemAccessRule ("testuser", "Read", "Allow")
$acl.AddAccessRule($ace)
Set-Acl -Path "C:\pc" -AclObject $acl

El primer comando obtiene las reglas de ACL existentes. El segundo comando crea una nueva FileSystemAccessRule para aplicar.

El tercer comando agrega la nueva regla ACL a los permisos existentes en la carpeta. El cuarto comando usa Set-Acl para aplicar la nueva ACL a la carpeta.

Puede ver los permisos de todos los usuarios con el siguiente comando.

(Get-ACL -Path "C:\pc").Access | Format-Table IdentityReference,FileSystemRights,AccessControlType

Producción :

IdentityReference  FileSystemRights AccessControlType
-----------------  ---------------- -----------------
DelftStack\rhntm          FullControl             Allow
DelftStack\testuser Read, Synchronize             Allow

Los administradores del sistema configuran los permisos NTFS para muchas carpetas y archivos mediante scripts para que el proceso sea más rápido y sencillo. Esperamos que este artículo le haya ayudado a comprender cómo establecer permisos en carpetas de forma recursiva mediante PowerShell.

Para obtener información detallada sobre los permisos de NTFS, escriba PowerShell, lea esta publicación.