Change owner recursively with Powershell?

I'm trying to use Powershell to change owner of a folder, recursively.

I'm basically using this code:

$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

This will change ownership at the first level, but not for any subfolders or files. Is there a way to extend the scope to all content of MyFolder?


Solution 1:

The takeown command does exactly what you're trying to do. It's a regular windows utility.

This snippet will apply ownership to the current user, but you can set it to any user you want.

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

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

If you run into trouble make sure you are running the cmd/powershell window with administrator permissions. Same applies to the other powershell specific answer.

Solution 2:

The Set-ACL cmdlet will take the path parameter from the pipe, so the recommended way is to pipe the contents of a directory to set the owner on each item:

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

That will recursively set the owner on all the folders/files in the temp directory in my profile.