21 votes

Changer le propriétaire récursivement avec Powershell ?

J'essaie d'utiliser Powershell pour changer le propriétaire d'un dossier, de manière récursive.

J'utilise essentiellement ce 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

Cela changera la propriété au premier niveau, mais pas pour les sous-dossiers ou les fichiers. Existe-t-il un moyen d'étendre la portée à tout le contenu de MyFolder ?

34voto

Nocturnal Points 113

La commande d'enlèvement fait exactement ce que vous essayez de faire. C'est un utilitaire Windows ordinaire.

Cet extrait appliquera la propriété à l'utilisateur actuel, mais vous pouvez la définir sur n'importe quel utilisateur.

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

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

Si vous rencontrez des difficultés, assurez-vous que vous exécutez la fenêtre cmd/powershell avec des droits d'administrateur. Il en va de même pour l'autre réponse spécifique à powershell.

8voto

Eric Minkes Points 1051

La cmdlet Set-ACL prendra le paramètre du chemin d'accès à partir du tuyau, donc la méthode recommandée est de faire passer le contenu d'un répertoire pour définir le propriétaire sur chaque élément :

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

Cela va récursivement définir le propriétaire de tous les dossiers/fichiers dans le répertoire temporaire de mon profil.

1voto

argonym Points 113

Utilice Get-ChildItem pour obtenir tous les dossiers et fichiers subordonnés, et changer le propriétaire de chacun d'entre eux :

$identityReference = [System.Security.Principal.NTAccount]::new('<new-owner-username>')
Get-Item C:\Path\To\Folder `
    | foreach { $_ ; $_ | Get-ChildItem -Force -Recurse } `
    | foreach { $acl = $_ | Get-Acl; $acl.SetOwner($identityReference); $_ | Set-Acl -AclObject $acl }

Je pense que c'est aussi ce que takeown.exe et l'interface graphique le font aussi.

Attention : Pour que cela fonctionne, vous devez avoir des autorisations de lecture du contenu des dossiers et des ACL. (Je pense que takeown et l'interface graphique peuvent contourner certaines autorisations manquantes (explicites) et le font dans certains cas).

Bonus : sous Windows 10/2016+, vous pouvez définir un clé de registre y pourrait ne pas souffrir de la Limitation de la longueur du chemin de fichier à 260 caractères lorsque vous utilisez PowerShell.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X