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

如何用PowerShell获取文件夹及子文件夹ACL权限并显示路径、用户组

嘿,没问题!我来帮你搞定这个PowerShell权限查询的需求😉

PowerShell获取文件夹权限及组成员方案

完全可以用PowerShell实现你要的功能——不仅能获取文件夹(含子文件夹)的路径、用户/组权限,还能展开组关联的用户。而且不需要你手动逐个处理文件夹,PowerShell的递归遍历功能会帮你自动搞定所有子文件夹。

完整脚本示例(适合新手)

下面是一个经过优化的脚本,注释很详细,你只需要修改开头的根文件夹路径就能用:

# -------------------------- 配置区 --------------------------
# 替换成你要查询的根文件夹路径
$rootFolder = "C:\Your\Target\Folder"
# 可选:如果要导出结果到CSV,取消下面一行的注释并设置路径
# $outputCsvPath = "C:\Temp\FolderPermissionsReport.csv"
# -----------------------------------------------------------

# 递归获取所有文件夹(包括子文件夹),逐个处理
Get-ChildItem -Path $rootFolder -Directory -Recurse | ForEach-Object {
    # 保存当前文件夹的完整路径(解决你之前没显示路径的问题)
    $currentFolder = $_.FullName
    
    # 获取该文件夹的访问控制列表(ACL)
    $folderAcl = Get-Acl -Path $currentFolder

    # 遍历每个权限条目
    foreach ($accessRule in $folderAcl.Access) {
        $identityName = $accessRule.IdentityReference.Value
        $isGroup = $false
        $groupMembers = @()

        # 判断当前权限主体是组还是用户,组的话获取成员
        try {
            # 先尝试查询Active Directory组(需要AD模块)
            $adGroup = Get-ADGroup -Identity $identityName -ErrorAction Stop
            $isGroup = $true
            # 递归获取组内所有成员(包括嵌套组)
            $groupMembers = Get-ADGroupMember -Identity $adGroup -Recursive | Select-Object -ExpandProperty Name
        }
        catch {
            # AD组查询失败,尝试查询本地组
            try {
                $localGroup = Get-LocalGroup -Name $identityName -ErrorAction Stop
                $isGroup = $true
                $groupMembers = Get-LocalGroupMember -Group $localGroup | Select-Object -ExpandProperty Name
            }
            catch {
                # 既不是AD组也不是本地组,判定为单独用户
                $isGroup = $false
            }
        }

        # 整理输出结果为结构化对象
        [PSCustomObject]@{
            FolderPath     = $currentFolder
            Identity       = $identityName
            IsGroup        = $isGroup
            GroupMembers   = if ($isGroup) { $groupMembers -join ", " } else { "N/A" }
            AccessRights   = $accessRule.FileSystemRights
            AccessType     = $accessRule.AccessControlType  # 允许/拒绝
        }
    }
} | Format-Table -AutoSize  # 直接在控制台显示结果
# 如果要导出到CSV,替换上面一行为:| Export-Csv -Path $outputCsvPath -NoTypeInformation -Encoding UTF8

关键细节解释

  1. 为什么之前没显示文件夹路径?
    你之前的脚本应该没把Get-ChildItem返回的文件夹对象的FullName属性带进去,上面的脚本里$currentFolder = $_.FullName就是专门用来捕获当前处理的文件夹完整路径的。

  2. 是否需要逐个处理文件夹?
    不需要你手动逐个操作!Get-ChildItem -Recurse会自动遍历根文件夹下的所有子文件夹,然后ForEach-Object会替你逐个处理每个文件夹的权限,整个过程是自动化的。

  3. 组成员的兼容性处理
    脚本同时支持AD组和本地组:先尝试查询AD组(需要RSAT AD模块,管理员权限下可以用Install-WindowsFeature RSAT-AD-PowerShell安装),如果失败再尝试本地组,确保在不同环境都能正常工作。

注意事项

  • 运行脚本需要管理员权限,否则可能无法读取某些系统文件夹的权限。
  • 如果是查询远程文件夹,确保你有足够的权限访问目标路径。
  • 如果权限条目很多,建议导出到CSV文件查看,比控制台输出更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:13:14