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

如何用PowerShell获取指定OU内控制文件共享文件夹访问的组的用户列表

实现方案(PowerShell 脚本)

前置要求

  • 运行环境需安装 Active Directory 模块(域控制器默认安装,成员服务器可通过RSAT工具安装)
  • 运行账号需拥有fileshare1共享的读取权限、指定OU的AD读取权限、AD组成员查询权限
  • 确保fileshare1的路径可以本地访问或通过UNC路径正常访问

操作步骤

1. 定义核心参数

先根据实际环境替换以下变量取值:

# 目标文件共享路径,可使用本地路径或UNC路径
$sharePath = "\\文件服务器地址\fileshare1"
# 指定AD组的OU完整路径
$targetOU = "OU=example2,OU=example1,OU=Groups,DC=domain1,DC=domain2,DC=example,DC=uk"
# 结果导出路径
$exportPath = "C:\temp\fileshare1权限清单.csv"

2. 获取指定OU下的所有AD安全组

# 提取目标OU下所有安全组,存储为哈希表方便后续匹配
$adGroups = Get-ADGroup -Filter * -SearchBase $targetOU -Properties Name, SamAccountName | Group-Object -AsHashTable -Property SamAccountName

3. 遍历目标共享下所有文件夹的ACL,提取匹配的AD组

# 递归获取所有文件夹的ACL(去掉-Recurse则只扫描根目录文件夹)
$folders = Get-ChildItem -Path $sharePath -Directory -Recurse -ErrorAction SilentlyContinue
$folderAclResults = @()

foreach ($folder in $folders) {
    $acl = Get-Acl -Path $folder.FullName -ErrorAction SilentlyContinue
    foreach ($accessRule in $acl.Access) {
        # 过滤掉非域身份、特殊权限项,只保留存在于目标OU的AD组
        $ruleAccount = $accessRule.IdentityReference.Value.Split("\")[-1]
        if ($adGroups.ContainsKey($ruleAccount)) {
            $folderAclResults += [PSCustomObject]@{
                文件夹路径 = $folder.FullName
                组名称 = $adGroups[$ruleAccount].Name
                组SamAccountName = $ruleAccount
            }
        }
    }
}

# 去重,避免同一个组在同一个文件夹出现多次不同权限条目重复统计
$uniqueGroupFolderPairs = $folderAclResults | Select-Object 文件夹路径,组名称,组SamAccountName -Unique

4. 查询每个匹配组的所有成员(包含嵌套组成员)

$finalResults = @()

foreach ($pair in $uniqueGroupFolderPairs) {
    # 递归获取组内所有用户成员,排除嵌套组本身
    $groupMembers = Get-ADGroupMember -Identity $pair.组SamAccountName -Recursive | Where-Object ObjectClass -eq "user" | Get-ADUser -Properties DisplayName, UserPrincipalName
    
    foreach ($member in $groupMembers) {
        $finalResults += [PSCustomObject]@{
            文件夹路径 = $pair.文件夹路径
            权限组名称 = $pair.组名称
            用户显示名 = $member.DisplayName
            用户登录名 = $member.UserPrincipalName
            用户SamAccountName = $member.SamAccountName
        }
    }
}

# 导出结果到CSV
$finalResults | Export-Csv -Path $exportPath -Encoding UTF8 -NoTypeInformation

结果说明

  • 生成的CSV文件包含所需的所有字段:每个文件夹对应的权限组、以及组内所有有访问权限的用户
  • 如果不需要扫描子文件夹,删除Get-ChildItem命令后的-Recurse参数即可
  • 脚本默认跳过无权限访问的文件夹,可根据需要调整ErrorAction参数处理异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:36:03