¿Cambiar de dueño recursivamente con Powershell?

9

Estoy tratando de usar Powershell para cambiar el propietario de una carpeta, de forma recursiva.

Básicamente estoy usando este código:

$acct1 = New-Object System.Security.Principal.NTAccount('DOMAIN\Enterprise Admins')
$profilefolder = Get-Item MyFolder
$acl1 = $profilefolder.GetAccessControl()
$acl1.SetOwner($acct1)
set-acl -aclobject $acl1 -path MyFolder

Esto cambiará la propiedad en el primer nivel, pero no para ninguna subcarpeta o archivo. ¿Hay alguna manera de extender el alcance a todo el contenido de MyFolder?

Mikael Grönfelt
fuente

Respuestas:

17

El comando takeown hace exactamente lo que intentas hacer. Es una utilidad regular de Windows.

Este fragmento aplicará la propiedad al usuario actual, pero puede configurarlo a cualquier usuario que desee.

http://technet.microsoft.com/en-us/library/cc753024(v=ws.10).aspx

takeown /f "c:\folder\subfolder" /r

Si tiene problemas, asegúrese de ejecutar la ventana cmd / powershell con permisos de administrador. Lo mismo se aplica a la otra respuesta específica de PowerShell.

Hombre aterrador
fuente
1
Parece que esto no funciona para establecer el propietario en un grupo (que no sea "Administradores")
Gert van den Berg
5

El cmdlet Set-ACL tomará el parámetro de ruta de la tubería, por lo que la forma recomendada es canalizar el contenido de un directorio para establecer el propietario en cada elemento:

dir -r c:\Users\goyuix\temp | set-acl -aclobject $acl1

Eso establecerá recursivamente el propietario en todas las carpetas / archivos en el directorio temporal en mi perfil.

Goyuix
fuente