Copiar permisos de archivos y carpetas con Powershell


Por suerte han hecho cmd-lets para manejar ACLs, y aunque todavia PS tiene muchas limitaciones no se puede trabajar "comodo" con muchas tareas, es cuestión de buscarle la vuelta, en fin...
suponiendo que queremos copiar (siempre pensando en scripting ;) una carpeta entre dos volumenes, supongamos "c:\prueba" copiarla a "d:\".
Los permisos NTFS (ACLs) se pierden cuando se copia un objeto entre volumenes, por lo tanto se puede recorrer a herramientas propias de Microsoft como "xcopy (con /K)" o "robocopy (/E)", lo vemos con PS.

> Copy-Item -Path C:\prueba D:\ -recurse -passthru


Descuartizamos....
Copy-Item: comando para copiar
-Path C:\prueba: Objeto a copiar
D:\: destino
-recurse: Recursivo, que copie subcarpetas
-passthru: que vaya mostrando el progreso.

Una vez copiados, le "copiamos" las ACLs (los permisos) del primer objeto al segundo. Para esto hay dos formas, con lo que llegamos a lo mismo: el tema es obtener las ACLs, y luego ponerlas en el destino:

1 forma:
> $lasacls = Get-Acl C:\prueba
> set-acl D:\prueba -AclObject $lasacls


descuartizamos...
$lasacls = Get-Acl C:\prueba: creamos una variable, que contendrá el resultado de "get-acl..." o sea, el resultado es la ACL de la carpeta.
set-acl D:\prueba: vamos a Setearle a d:\prueba las acls..
-AclObject $lasacls: le aplicamos las ACLs contenidas en la variable (las del origen)

2 forma:
> set-acl D:\prueba -AclObject (Get-Acl C:\prueba)

descuartizamos...
set-acl D:\prueba: vamos a Setearle a d:\prueba las acls..
-AclObject (Get-Acl C:\prueba): lo que indiquemos entre parentesis, lo resolverá antes que nada, por lo tanto se le asignará el resultado del comando entre (), o sea, las ACLs

para ver los permisos de una carpeta o archivo:
get-acl c:\prueba

mas bonito...
get-acl c:\prueba | format-table -autosize -wrap

mas comodo...
get-acl c:\prueba | format-list

PD: Siempre intento poner los comandos completos, miren un poco las alias, para ahorrarse tipeo.

3 comentarios:

Anónimo dijo...

Hola que tal? veras haciendo tareas de clase estamos ahora en el tema de permisos y usuarios, y en linux todo de maravilla, pero estamos también usando el windows 7 y su powershell, esto parece que copia permisos, pero como hacemos para crearlos? he buscado por internet leído manuales, varios pdf y demás y no veo ningún sitio que me diga de manera clara y sencilla como ponerle permisos de lectura, escritura y ejecución a directorios o archivos. Vamos que tenemos que recurrir a la interfaz gráfica para dar permisos o hay una manera de hacerlo como en windows xp? Saludos y gracias

Miguel dijo...
Este comentario ha sido eliminado por el autor.
Miguel dijo...

Para le gente que esta buscando y buscando y buscando y buscando.
lean esto:
http://technet.microsoft.com/es-es/magazine/2008.02.powershell.aspx