Obtener permisos de archivos o carpetas con PowerShell

El cmdlet Get-Acl en el módulo de seguridad de PowerShell (Microsoft.PowerShell.Security) hace un gran trabajo para obtener los permisos de archivos o carpetas (también conocido como la lista de control de acceso o ACL). Pero obtener información útil de la salida por defecto puede tomar algún tiempo para acostumbrarse.

En cambio, sería genial poder ver simplemente lo que muestra la pestaña Seguridad de un archivo, carpeta u otro recurso, pero sin tener que pasar por la interfaz de usuario del Explorador de archivos y los múltiples clics.


Figura 1: Pestaña de seguridad de una carpeta en el Explorador de Windows

Una sola línea: Obtener permisos de archivos o carpetas

Aquí hay un one-liner para hacer exactamente eso:

(get-acl <nombre de la carpeta>).access | ft IdentityReference,FileSystemRights,AccessControlType,IsInherited,InheritanceFlags -auto

La salida:

La función Get-Permissions

¿Quieres hacer la salida más legible? Aquí hay una función PowerShell que utiliza etiquetas personalizadas (títulos en cada columna de la tabla).

Puedes guardarla como un script de PowerShell o añadirla a tu perfil de PowerShell para que esté siempre disponible.

123456789
 function Get-Permissions ($folder) { (get-acl $folder).access | select `@{Label="Identity";Expression={$_.IdentityReference}}, `@{Label="Right";Expression={$_.FileSystemRights}}, `@{Label="Access";Expression={$_.AccessControlType}}, `@{Label="Inherited";Expression={$_.IsInherited}}, `@{Label="Banderas de Herencia";Expression={$_.InheritanceFlags}}, `@{Label="Banderas de Propagación";Expression={$_.PropagationFlags}} | ft -auto}

Puede omitir las dos propiedades relacionadas con la herencia si no necesita esa información.

Ahora puede utilizar Get-Permissions con el nombre de la carpeta:

Get-Permissions c:\myfolder

La salida:

También puede canalizar la salida de los comandos dir, ls o gci, todos los cuales son alias de PowerShell para el cmdlet Get-ChildItem.

dir <ruta> | % {Get-Permissions -ruta $_.nombre_completo}

Una función para abrir las Propiedades del archivo o carpeta en el Explorador

Si realmente te gusta ver los permisos en la GUI del Explorador de Archivos, puedes usar esta función para abrir la página de Propiedades > Generales del archivo o carpeta. (No he encontrado una manera de abrir directamente la pestaña de Seguridad. Si sabes cómo hacerlo, por favor comparte en los comentarios del post).

12345678910111213141516171819202122
function Get-Properties ($ruta) {#salir si no se encuentra la rutaif (-not ($ruta | Test-Ruta)) { Write-Host "$ruta no se encuentra. Por favor, especifique una ruta de archivo o carpeta válida." -foregroundcolor red return } $o = new-object -com Shell.Application$item = get-item $path if ($item.gettype() -eq ) {write-host "Encontrada la carpeta $path... Obteniendo propiedades"$fso = $o.Namespace("$ruta")$fso.self.InvokeVerb("propiedades") } if ($item.gettype() -eq ){write-host "Encontrado archivo $ruta... Obteniendo propiedades"$fso = $o.Namespace($item.directoryname)$file = $fso.parsename($item.pschildname)$file.InvokeVerb("properties")}}

Ahora sólo tienes que usar Get-Properties <Folder of file name> para abrir rápidamente la página de propiedades del archivo o carpeta desde el shell.


Figura 2: Usar la función Get-Properties para abrir rápidamente las propiedades de un archivo o carpeta desde PowerShell

Módulo PowerShell de Seguridad del Sistema de Archivos

Microsoft PFE Raimund Andrée publicó el Módulo PowerShell de Seguridad del Sistema de Archivos hace un tiempo. Añade algunos cmdlets útiles para gestionar los permisos del sistema de archivos utilizando PowerShell. También revisa sus correspondientes publicaciones en el blog Weekend Scripter: Use PowerShell to Get, Add, and Remove NTFS Permissions y NTFSSecurity Tutorial 2 – Managing NTFS Inheritance and Using Privileges.

Tags
PowerShell Scripts Security Windows

Deja una respuesta

Tu dirección de correo electrónico no será publicada.