Answers:
要修复真正损坏的权限,最好是一个接一个地运行这两个命令:
takeown /f "C:\path\to\folder" /r
icacls "C:\path\to\folder" /reset /T
第一个将为您提供所有文件的所有权,但这可能是不够的,例如,如果所有文件的读/写/执行权限都设置为“拒绝”。您拥有这些文件,但仍然无法对它们执行任何操作。
在这种情况下,运行第二个命令,它将修复损坏的权限。
/D Y
参数来 takeown
所以它会自动确认你没有'list directory'权限的递归目录。
/D Y
,在法国人 /D O
,也许是西班牙语 /D S
等
请注意,不推荐使用cacls(因为Windows Vista?),它建议您使用 icacls
。
此命令将递归重置文件夹的权限:
icacls "C:\path\to\folder" /reset /T
我遇到路径很长(大于256个字符)的文件有问题。这两个命令
takeown /f "C:\path\to\really_long_folder_name" /r
icacls "C:\path\to\really_long_folder_name" /reset /T
除了这些具有很长路径和名称的文件外,它们都工作。我最终重命名了
"C:\path\to\really_long_folder_name"
至
"C:\path\to\r"
然后跑
takeown /f "C:\path\to\r" /r /D Y
icacls "C:\path\to\r" /grant Everyone:(F) /t /c /q
之后我可以将文件夹重命名为更合理的东西。 takeown's / D Y对提示回答是。对于icacls,我使用/ grant来给所有人提供完全访问权限(因为我只是试图从死机上访问硬盘驱动器上的数据),使用/ t处理子文件夹和文件,/ q以安静模式运行(隐藏成功)和/ c显示错误。我重复了这个过程,重命名文件夹,直到所有文件权限都成功更新。
希望这有助于遇到类似于“未能枚举容器访问中的对象”的错误的人在尝试从旧硬盘访问数据时遇到的错误。
感谢@this.lau_为/ reset提示,这正是我需要完成我的脚本以获取CSC的所有权并对其进行备份。在获得C:\ Windows \ CSC的所有权之后,权限往往在继承方面变得非常不一致 - / reset开关直接为我修复了这个问题。
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 - 如果你从上面查看$ icaclsource变量,你会发现我在源路径前添加了“\?\”。通过在前面添加它,它将接受更长的文件名。这也是我遇到的一个问题,但是这个问题解决了!干杯。
玩笑