求助:PowerShell脚本无法实现替换子对象可继承权限项功能
解决方法
原代码的核心问题是Set-Acl的*-Recurse*参数无法递归将修改后的ACL应用到子对象,它仅对路径中包含通配符的场景生效。要实现勾选「替换所有子对象权限项为来自此对象的可继承权限项」的效果,推荐以下两种可靠方案:
方案一:PowerShell递归遍历处理
$folderPath = "H:\" # 配置根目录权限:启用继承并清除自身显式权限 $rootAcl = Get-Acl -Path $folderPath $rootAcl.SetAccessRuleProtection($false, $true) Set-Acl -Path $folderPath -AclObject $rootAcl -Force # 递归遍历所有子目录和文件,统一应用继承设置 Get-ChildItem -Path $folderPath -Recurse -Force | ForEach-Object { $itemAcl = Get-Acl -Path $_.FullName $itemAcl.SetAccessRuleProtection($false, $true) Set-Acl -Path $_.FullName -AclObject $itemAcl -Force } Write-Host "已完成所有子对象的可继承权限替换操作"
方案二:使用icacls命令(高效批量处理)
icacls是系统原生的权限管理工具,直接支持递归替换继承权限,命令更简洁高效:
icacls "H:\" /inheritance:e /T /C
*/inheritance:e*:启用继承并清除对象的显式权限(对应勾选的目标选项)*/T*:递归处理所有子目录和文件*/C*:遇到错误时继续执行,不中断整个任务
方案对比
- 方案一适合需要额外自定义权限逻辑的场景,灵活性高
- 方案二执行速度更快,适合处理包含大量文件/目录的路径
内容的提问来源于stack exchange,提问作者snehasish nandy
相关产品推荐
相关产品推荐

