Mantener los permisos para compartir archivos en todos los servidores puede ser un desafío importante, pero al utilizar PowerShell, podemos automatizar este procedimiento permitiéndole volver a casa temprano.
Al realizar una migración de archivos, no solo debe prestar atención los archivos y la carpeta en sí, sino además los permisos establecidos en esos objetos. En cada archivo y carpeta podría haber un conjunto distinto de Entradas de control de acceso (ACE) que componen una Lista de control de acceso (ACL). Dependiendo de la cantidad de archivos que esté migrando, esto puede ser mucho.
Al mover archivos a una nueva ubicación, los permisos no siempre vienen con ellos. Al realizar una migración masiva, como servidores de archivos completos con permisos intrincados, es esencial mantener esos permisos con los objetos a medida que se mueven a la nueva ubicación.
Hay algunas alternativas para hacer esto.
Una herramienta favorita para realizar migraciones de archivos es robocopia. Robocopia es una gran herramienta con muchas campanas y silbidos, pero puede ser complicado de utilizar y puede que no funcione en todas las situaciones. Cuando esto sucede, regularmente busco una herramienta llamada icacls. Esta es una herramienta que existe desde hace mucho tiempo y, como robocopia, tiene muchos interruptores, por lo tanto simplifiquemos un poco esta herramienta con algo de PowerShell.
Utilizar PowerShell para transferir permisos
Aún cuando puede utilizar la utilidad de línea de comandos icacls de forma directa, no es la más fácil de comprender. Para remediar esto, aprenderá con relación a PowerShell como contenedor para invocar el icacls herramienta para simplificar este procedimiento a veces abrumador.
Primero, necesitaremos descargar una herramienta existente que ya fue creada para nosotros. Una de las mejores cosas de la comunidad de PowerShell es que, por lo general, existe una herramienta para ayudarnos. En esta circunstancia, necesitaremos un módulo de PowerShell. Este módulo de PowerShell se puede hallar en el Galería de PowerShell.
Si tiene PowerShell v4 o posterior, ya tendrá algunos comandos para tomar este módulo rápidamente.
PS> Find-Module -Name NTFSPermissionMigration | Install-Module
Una vez que haya terminado el código anterior, ahora debería tener un nuevo módulo instalado en su computadora disponible para su uso. Una vez que se hace esta instalación, ahora necesitamos ejecutar un comando dentro del módulo en la carpeta que contiene todos los archivos a los que nos gustaría transferir permisos.
PS> Save-Acl -FolderPath OLDSERVERFileShare -SaveFilePath C:FilePermissions.txt
Una vez que se ejecuta, debería ver una salida semejante a esta y comenzar a ver que el archivo guardado comienza a crecer.
processed file: OLDSERVERFileShareFile1.txt
processed file: OLDSERVERFileShareFile2.exe
Successfully processed X files; Failed processing 0 files
Cuando esto esté completo, ahora debería tener todos los permisos para los archivos y carpetas dentro del archivo guardado. Ahora, podemos restaurar este archivo. A pesar de esto, antes de que esto suceda, asegúrese de hacer una exacto copia de todos los archivos dentro de la carpeta anterior; caso contrario, esto no funcionará.
Para restaurar los permisos a la nueva ruta de carpeta, ahora usaríamos el Restore-Acl
mando.
PS> Restore-Acl -RestoreToFolderPath NEWFILESERVERFileShare -PermissionFilePath C:FilePermissions.txt
Successfully processed XXX files; Failed processing 0 files
Una vez que esto esté completo, ¡todos los permisos NTFS deben reflejarse desde su carpeta de origen y la nueva carpeta de destino!
Resumen
El uso de un módulo sin costes de PowerShell de la comunidad y un poco de magia de secuencias de comandos puede convertir la tarea abrumadora de mover los permisos NTFS de un servidor a otro en un juego de niños.