web-dev-qa-db-fra.com

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

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. dans ce répertoire à la fois?

91
user3109

Utilisez takeown à partir de la commande Invite pour s'approprier un dossier, 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.

88
Kez

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.

101
laurent

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

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

icacls "C:\path\to\folder" /reset /T
26
therefromhere

Vous pouvez utiliser cacls à partir de la commande Invite:

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

Le commutateur /T lui permet de fonctionner de manière récursive. Remplacez Administrator par l'utilisateur auquel vous souhaitez accorder des autorisations.

5
John T

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/D Y 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 mort), avec/t pour traiter les sous-dossiers et fichiers, 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.

1
Thesle Williams

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.

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

0
Joshua Biddle