changer récursivement les fenêtres des propriétaires 7

95

D'une manière ou d'une autre, j'ai accidentellement défini tous les fichiers d'un sous-dossier sur "Pas de propriétaire" et il semble impossible de modifier toutes les autorisations. Je peux en modifier un manuellement en modifiant le propriétaire, puis en définissant des autorisations, mais comment puis-je changer le propriétaire de tous les fichiers dans ce répertoire à la fois?

laurent
la source

Réponses:

92

Utilisez takeownl'invite de commande pour prendre possession d'un dossier, de tous ses sous-dossiers et fichiers de manière récursive:

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

Cela fonctionne bien, mais si vous n'exécutez pas votre console de ligne de commande en tant qu'administrateur, il est possible que les fichiers que vous ne possédez pas échouent.

Kez
la source
105

Pour réparer les autorisations vraiment brisées, le mieux est d'exécuter ces deux commandes l'une après l'autre:

takeown /f "C:\path\to\folder" /r
icacls "C:\path\to\folder" /reset /T

Le premier vous donnera la propriété de tous les fichiers, mais cela pourrait ne pas être suffisant, par exemple si tous les fichiers ont les autorisations lecture / écriture / exécution définies sur "refuser". Vous possédez les fichiers mais vous ne pouvez toujours rien faire avec eux.

Dans ce cas, exécutez la deuxième commande, qui corrigera les autorisations brisées.

laurent
la source
3
Excellent conseil technique ... votre solution était la seule qui a fonctionné. Merci encore.
Carrabino
4
Le meilleur conseil, il faut utiliser à la fois la prise de vue et les icacls.
Gnac
2
/ Une option est utile si vous souhaitez donner "la propriété du groupe des administrateurs à la place du propriétaire actuel". Pour ce faire, vous devez disposer des privilèges d'administrateur. Il peut être nécessaire d’ouvrir la fenêtre cmd en utilisant ctrl-shift-enter.
PeterVermont
4
J'ai ajouté le /D Yparamètre à takeownafin de confirmer automatiquement les répertoires récursifs pour lesquels vous ne disposez pas des autorisations «Répertoire de listes».
Jeroen Wiert Pluimers
3
@JeroenWiertPluimers, bien que ce soit un bon conseil, j'ai supprimé le montage car il s'agit (assez stupidement) d'un paramètre localisé, donc sur Windows anglais, ce sera /D Y, sur le français /D O, peut-être sur l'espagnol /D S, etc.
laurent
26

Notez que cacls est obsolète (depuis Windows Vista?) Et vous conseille de l'utiliser icacls.

Cette commande réinitialisera de manière récursive les autorisations sur un dossier:

icacls "C:\path\to\folder" /reset /T
de là
la source
5

Vous pouvez utiliser à caclspartir de l'invite de commande:

cacls "C: \ chemin \ vers \ dossier" / E / T / C / G "administrateur": F

Le /Tcommutateur lui permet de fonctionner de manière récursive. Remplacez-le Administratorpar l'utilisateur auquel vous souhaitez accorder des autorisations.

John T
la source
1

J'ai eu des problèmes avec les fichiers avec des chemins très longs (plus de 256 caractères). Les deux commandes

takeown /f "C:\path\to\really_long_folder_name" /r
icacls "C:\path\to\really_long_folder_name" /reset /T

travaillé sauf pour ces fichiers avec des chemins et des noms très longs. J'ai fini par renommer

"C:\path\to\really_long_folder_name"

à

"C:\path\to\r"

puis en cours d'exécution

takeown /f "C:\path\to\r" /r /D Y
icacls "C:\path\to\r" /grant Everyone:(F) /t /c /q

après quoi je pourrais renommer les dossiers en quelque chose de plus sensé. takeown's / DY répond oui aux invites. Pour icacls, j’utilisais / grant pour donner un accès complet à tout le monde (comme j’essayais simplement d’accéder aux données d’un disque dur depuis un PC éteint), avec / t pour traiter les sous-dossiers et les fichiers, / q pour s’exécuter en mode silencieux (masquer succès) et / c pour afficher les erreurs. J'ai répété le processus, en renommant les dossiers jusqu'à ce que toutes les autorisations de fichiers soient correctement mises à jour.

J'espère que cela aidera quelqu'un qui a rencontré des erreurs similaires aux erreurs "échec d'énumération des objets dans l'accès au conteneur est refusé" lorsque je tentais d'accéder aux données d'un ancien disque dur.

Thesle Williams
la source
0

Merci @ this.lau_ pour le conseil / reset, c’est exactement ce dont j'avais besoin pour terminer mon script afin de prendre possession du CSC et d’en faire une copie de sauvegarde. Après avoir pris possession de C: \ Windows \ CSC, les autorisations ont tendance à être très incohérentes en ce qui concerne l'héritage - le commutateur / reset a corrigé le problème directement pour moi.

Function Copy-CSCData {
    $Datetime = Get-Date -Format yyyyMMdd.hhmmss
    $LogPath = 'PATH TO LOG'
    $CSCSource = 'C:\Windows\CSC\v2.0.6\namespace'
    $Dest = 'DESTINATION PATH'
    $icaclsource = "\\?\" + $CSCSource

    $CSCLogfile = "$LogPath\" + "$Datetime" + "_CSCRobocopy.log"

    icacls.exe $icaclsource /reset /T
    icacls.exe $icaclsource /grant :r "Everyone:(OI)(CI)F"

    Robocopy $CSCSource $Dest /Copy:DATSO /E /XO /Z /LOG+:$CSCLogfile /V /FP /NP /R:2 /W:2 /XF "~$*","*.tmp"
}

@Thesle Williams - si vous extrayez la variable $ icaclsource ci-dessus, vous remarquerez que j'ajoute "\? \" Devant le chemin source. En ajoutant ceci à l'avant, il acceptera les noms de fichiers plus longs. C’est aussi un problème que j’ai eu mais cela a réglé le problème! À votre santé.

Josh

Joshua Biddle
la source
Bienvenue sur Super User! Il suffit de vous informer que le "ping" des utilisateurs ne fonctionne que dans les commentaires aux articles, pas dans les articles réels. Malheureusement, vous ne pouvez pas commenter des articles autres que le vôtre ou des réponses à vos questions jusqu'à ce que vous ayez plus de 50 ans de réputation . Voir Comment fonctionnent les commentaires @ réponses? . Notez que vous ne pouvez pas cingler n'importe qui dans un commentaire. Seul l'auteur du message et tout autre utilisateur ayant déjà commenté.
robinCTS