Mudar de proprietário recursivamente com o Powershell?

9

Estou tentando usar o Powershell para alterar o proprietário de uma pasta, recursivamente.

Basicamente, estou 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

Isso mudará a propriedade no primeiro nível, mas não para subpastas ou arquivos. Existe uma maneira de estender o escopo para todo o conteúdo MyFolder?

Mikael Grönfelt
fonte

Respostas:

17

O comando takeown faz exatamente o que você está tentando fazer. É um utilitário regular do Windows.

Esse snippet aplicará a propriedade ao usuário atual, mas você pode configurá-lo para qualquer usuário que desejar.

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

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

Se você tiver problemas, verifique se está executando a janela cmd / powershell com permissões de administrador. O mesmo se aplica à outra resposta específica do PowerShell.

homem assustador
fonte
1
Este doe ranho parecem trabalhar para definir o proprietário a um grupo (diferente de "Administradores")
Gert van den Berg
5

O cmdlet Set-ACL utilizará o parâmetro path do canal, portanto, a maneira recomendada é canalizar o conteúdo de um diretório para definir o proprietário em cada item:

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

Isso definirá recursivamente o proprietário em todas as pastas / arquivos no diretório temp no meu perfil.

Goyuix
fonte