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

PowerShell使用Get-Childitem排除文件并结合Get-ADGroupMember生成权限报表

PowerShell代码修改方案

核心调整点

  • 过滤不需要的文件:优先直接查询文件夹(跳过所有文件,效率最高),也可通过后缀排除规则过滤指定格式文件
  • 新增AD组成员查询:对识别到的域用户组自动拉取成员信息,新增单独列存储
  • 优化导出逻辑:结果先存入数组再一次性导出,避免频繁IO导致的性能问题

完整修改后代码

# 加载AD模块(需提前安装RSAT-AD-PowerShell功能)
Import-Module ActiveDirectory -ErrorAction SilentlyContinue

# 配置参数
$rootPath = "C:\Downloads\TEST"
$exportPath = "C:\Downloads\FinanceResult.csv"
# 要排除的文件后缀
$excludeExts = @("*.txt","*.msg","*.doc","*.xlsx","*.xls","*.docx")
# 存储所有结果的数组
$results = @()

# 获取目标路径下的所有对象:如果只需要查询文件夹权限,加 -Directory 参数即可跳过所有文件,无需后缀过滤
# 示例1:只查文件夹(推荐,符合你的需求)
$allItems = Get-ChildItem -Path $rootPath -Recurse -Directory
# 示例2:保留文件只排除指定后缀,替换上面一行为下一行即可
# $allItems = Get-ChildItem -Path $rootPath -Recurse -Exclude $excludeExts

ForEach ($item in $allItems) {
    $Acl = Get-Acl -Path $item.FullName
    ForEach ($Access in $Acl.Access) {
        # 处理AD组成员
        $groupMembers = "非域组/无法获取成员"
        $identity = $Access.IdentityReference.Value
        # 匹配域组格式 域名\组名,尝试查询成员
        if ($identity -match '^\\?\w+\\\w+$' -and (Get-Module ActiveDirectory)) {
            try {
                $adGroup = Get-ADGroup -Identity $identity.Split("\")[1] -ErrorAction Stop
                $members = Get-ADGroupMember -Identity $adGroup -Recursive | Select-Object -ExpandProperty Name
                $groupMembers = $members -join "; "
            }
            catch {
                # 不是域组的情况保留默认值
            }
        }
        # 构造输出属性
        $Properties = [ordered]@{
            '路径' = $item.FullName
            '类型' = $item.PSIsContainer ? "文件夹" : "文件"
            '组/用户' = $identity
            '组内成员' = $groupMembers
            '权限' = $Access.FileSystemRights
            '是否继承' = $Access.IsInherited
        }
        $results += New-Object -TypeName PSObject -Property $Properties
    }
}

# 一次性导出所有结果
$results | Export-Csv -Path $exportPath -NoTypeInformation -Encoding UTF8

使用说明

  1. 如果你只需要统计文件夹权限,使用默认的-Directory参数即可,完全不需要处理文件过滤逻辑,执行效率更高
  2. 如果需要保留非指定后缀的文件,将Get-ChildItem部分替换为注释里的示例2即可
  3. 代码默认使用递归查询AD组成员,嵌套组内的用户也会全部拉取,不需要递归可以去掉Get-ADGroupMember后的-Recursive参数
  4. 导出的CSV默认用UTF8编码,用Excel打开不会出现乱码,AD组成员在单独的相邻列展示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:15:05