You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

批量删除文件权限中已删除用户的未知SID权限条目失败,寻求解决方案

批量删除文件权限中已删除用户的未知SID权限条目失败,寻求解决方案

我完全懂你现在的糟心处境——手动通过GUI删单个文件的未知SID权限没问题,但要处理500个文件的话,手动操作简直是噩梦。用icacls命令没效果,找的PowerShell脚本又因为缺AD组件报错,下面给你几个靠谱的解决方案:


先排查并修正icacls命令的问题

你之前用的/remove:d参数只针对**拒绝(Deny)**权限条目,但有时候这个未知SID可能还存在其他类型的权限,或者参数使用有问题,你可以试试以下调整:

  • 去掉:d参数,直接删除该SID的所有权限条目:
    icacls C:\test\Admin\*.* /remove *S-1-5-21-2076865150-1137883396-1755809354-1013 /t /c
    
  • 确认路径覆盖范围:*.*可能没包含子文件夹里的无后缀文件,换成C:\test\Admin\*试试,确保遍历所有内容
  • 务必用管理员权限打开命令提示符,权限不足会导致命令看似执行成功但实际没修改任何内容

不依赖AD模块的PowerShell解决方案

你找到的脚本需要AD管理模块(Get-ADRootDSE是AD模块的命令),如果你的机器没装AD工具包就会报错。下面这个独立脚本不需要AD组件,直接遍历文件并删除指定SID的权限:

# 目标路径和要删除的SID
$targetPath = "C:\test\Admin"
$sidToRemove = "S-1-5-21-2076865150-1137883396-1755809354-1013"

# 递归遍历所有文件和子文件夹(包含隐藏/系统文件)
Get-ChildItem -Path $targetPath -Recurse -Force | ForEach-Object {
    # 获取当前文件/文件夹的ACL
    $acl = Get-Acl -Path $_.FullName -ErrorAction SilentlyContinue
    if ($acl) {
        # 筛选出属于目标SID的所有权限规则
        $rulesToDelete = $acl.Access | Where-Object { $_.IdentityReference.Value -eq $sidToRemove }
        foreach ($rule in $rulesToDelete) {
            $acl.RemoveAccessRule($rule) | Out-Null
        }
        # 应用修改后的权限
        try {
            Set-Acl -Path $_.FullName -AclObject $acl -ErrorAction Stop
            Write-Host "✅ 成功更新权限: $($_.FullName)"
        } catch {
            Write-Warning "❌ 更新失败: $($_.FullName) - $_"
        }
    } else {
        Write-Warning "⚠️ 无法获取ACL: $($_.FullName)"
    }
}

使用提示:

  1. 管理员权限打开PowerShell
  2. 把脚本里的路径和SID换成你的实际信息
  3. 执行脚本后,会输出每个文件的处理结果,方便你排查问题

备选工具:微软官方的SubInACL

如果你不想写脚本,可以试试微软的SubInACL工具(专门用于批量权限管理),安装后执行以下命令:

subinacl /subdirectories "C:\test\Admin\*" /deleteuser=S-1-5-21-2076865150-1137883396-1755809354-1013

这个工具会递归处理目标路径下的所有文件和文件夹,直接删除指定SID的所有权限条目。


备注:内容来源于stack exchange,提问作者Alcor Prism

火山引擎 最新活动