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

使用Get-ACL筛选文件服务器AD安全组权限的问题求助

问题分析与解决方法

你之前命令的错误点

  • 未指定目标路径:Get-ACL 不接参数时,只会获取当前工作目录的权限设置。如果你要排查文件共享服务器的文件夹,必须明确指定共享路径(比如 \\fileserver\sharedfolder),否则要么返回当前目录的ACL,要么因权限问题无输出。
  • 直接匹配Access集合错误:$_.Access 是FileSystemAccessRule对象的集合,不是单一字符串,直接用 -like 或 -match 无法正确匹配其中的用户/组信息。必须遍历集合里的每个对象,检查其 IdentityReference 属性(这才是存储用户/组名称的字段)。

正确的PowerShell命令示例

1. 查找指定文件夹下包含特定AD组权限的项

假设你要检查 \\fileserver\shared 下的文件夹,筛选包含名为SalesGroup的AD组权限的目录:

Get-ChildItem -Path \\fileserver\shared -Directory -Recurse | ForEach-Object {
    $acl = Get-Acl -Path $_.FullName
    $hasTargetGroup = $acl.Access | Where-Object {
        $_.IdentityReference.Value -match "SalesGroup"
    }
    if ($hasTargetGroup) {
        [PSCustomObject]@{
            FolderPath = $_.FullName
            GroupName  = $hasTargetGroup.IdentityReference.Value
            Permissions = $hasTargetGroup.FileSystemRights
        }
    }
}

2. 批量检查多组AD权限

如果有多个AD组要排查,先把组名存入数组,再批量匹配:

$targetGroups = @("SalesGroup", "HRGroup", "FinanceGroup")

Get-ChildItem -Path \\fileserver\shared -Directory -Recurse | ForEach-Object {
    $folderPath = $_.FullName
    $acl = Get-Acl -Path $folderPath
    $matchedGroups = $acl.Access | Where-Object {
        $targetGroups -contains $_.IdentityReference.Value.Split("\")[-1]
    }
    if ($matchedGroups) {
        foreach ($group in $matchedGroups) {
            [PSCustomObject]@{
                FolderPath = $folderPath
                GroupName  = $group.IdentityReference.Value
                Permissions = $group.FileSystemRights
            }
        }
    }
}

注意事项

  • 运行命令时需要拥有文件共享服务器的读取权限,否则会报错无法访问路径。
  • 如果共享目录层级很深,-Recurse 参数会遍历所有子目录,可能耗时较长,可先去掉该参数测试单个目录。
  • IdentityReference.Value 的格式通常是域\组名,用Split("\")[-1]可以只取组名部分,避免域名称影响匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:26:00