You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell查询文件夹权限列表中的AD组?

查找指定文件夹关联的AD组问题解决

你的代码无法识别AD组是因为这些组在ACL中以SID形式存在,未被解析为可读的组名称,导致前缀过滤失效。以下是修正后的解决方案:

修正后的PowerShell代码

$FolderPath = "W:\my_path"
$GroupPrefix = "A_Known_Prefix_Of_Each_Group"

# 获取目标文件夹的访问控制列表
$Acl = Get-Acl -Path $FolderPath

# 解析权限条目中的SID为可读名称,并过滤指定前缀的AD组
$Groups = $Acl.Access | ForEach-Object {
    $identity = $_.IdentityReference
    # 判断是否为AD域SID格式(S-1-5-21开头)
    if ($identity.Value -match "^S-1-5-21-") {
        try {
            # 将SID转换为NTAccount格式(域\组名)
            $ntAccount = $identity.Translate([System.Security.Principal.NTAccount])
            $ntAccount.Value
        }
        catch {
            # 解析失败时保留原SID
            $identity.Value
        }
    }
    else {
        $identity.Value
    }
} | Where-Object { $_ -like "${GroupPrefix}*" } | Select-Object -Unique

Write-Host "拥有$FolderPath访问权限的AD组->"
$Groups

关键说明

  1. SID解析:通过Translate方法将AD组的SID转换为域\组名的可读格式,让前缀过滤规则能正常匹配。
  2. 去重处理:使用Select-Object -Unique避免同一个组因多条权限规则重复出现。
  3. 兼容性:无需依赖Active Directory模块,纯.NET类即可完成SID解析,适用于大多数Windows环境。

自动化扩展(添加用户到对应AD组)

如果要实现用户请求权限时自动添加到目标组,可结合Active Directory模块的Add-ADGroupMember命令:

$targetUser = "DOMAIN\UserName" # 替换为实际用户名

$Groups | ForEach-Object {
    Add-ADGroupMember -Identity $_ -Members $targetUser
    Write-Host "已将用户 $targetUser 添加到组 $_"
}

内容的提问来源于stack exchange,提问作者Anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 23:25:14