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

如何在PowerShell中生成AD域用户及组可访问网络共享的CSV列表?

无需外部工具,用PowerShell即可实现需求

完全可以仅用PowerShell(搭配Active Directory模块)生成符合要求的CSV报告,以下是分步实现方案:

前置准备

  1. 确保已安装Active Directory模块:Windows Server默认自带,客户端需安装RSAT工具中的AD模块
  2. 运行脚本的账号需具备:
    • 域内用户/组的读取权限
    • 目标共享资源的权限查看权限

步骤1:获取域内共享资源并提取权限

先获取所有非系统默认共享(可根据需求调整过滤规则),再提取每个共享的访问权限:

# 导入AD模块
Import-Module ActiveDirectory

# 替换为你的域名称
$domainName = "YOUR_DOMAIN"

# 获取所有非系统默认共享(过滤ADMIN$、IPC$等)
$shares = Get-SmbShare | Where-Object { $_.Name -notin @("ADMIN$", "IPC$", "C$", "D$") }

# 遍历共享,提取权限及对应AD对象类型(用户/组)
$sharePermissions = foreach ($share in $shares) {
    $accessRules = Get-SmbShareAccess -Name $share.Name -ErrorAction SilentlyContinue
    foreach ($rule in $accessRules) {
        # 仅处理域内对象
        if ($rule.AccountName -match "^$domainName\\") {
            $adObjectName = $rule.AccountName.Split("\")[1]
            $adObject = Get-ADObject -Filter { Name -eq $adObjectName } -Properties ObjectClass -ErrorAction SilentlyContinue
            $objectType = if ($adObject) { $adObject.ObjectClass } else { "Unknown" }
        } else {
            $objectType = "Local/Non-Domain Object"
        }

        [PSCustomObject]@{
            ShareName     = $share.Name
            SharePath     = $share.Path
            IdentityName  = $rule.AccountName
            AccessRight   = "$($rule.AccessControlType) - $($rule.AccessRight)"
            ObjectType    = $objectType
        }
    }
}

步骤2:导出基础权限CSV

直接导出所有用户/组的共享权限记录:

$sharePermissions | Export-Csv -Path "AD_Share_Permissions_Base.csv" -NoTypeInformation -Encoding UTF8

这份CSV会包含:共享名称、共享路径、权限主体(用户/组)、权限类型、对象类型。


步骤3:生成用户实际访问权限报告(含组继承)

如果需要获取用户通过直接权限+组继承的所有可访问共享,可使用以下脚本生成用户专属报告:

# 递归获取用户所属的所有嵌套组
function Get-NestedGroups {
    param([string]$SamAccountName)
    $adObject = Get-ADUser $SamAccountName -Properties MemberOf -ErrorAction SilentlyContinue
    if ($adObject) {
        $groups = $adObject.MemberOf | Get-ADGroup
        foreach ($group in $groups) {
            $group
            # 递归获取组的父组
            Get-NestedGroups -SamAccountName $group.SamAccountName
        }
    }
}

# 生成每个用户的完整访问报告
$userAccessReports = foreach ($user in Get-ADUser -Filter *) {
    # 获取用户所有嵌套组
    $userGroups = Get-NestedGroups -SamAccountName $user.SamAccountName | Select-Object -Unique SamAccountName
    $groupIdentities = $userGroups | ForEach-Object { "$domainName\$_" }

    # 提取用户直接权限+组继承权限
    $directAccess = $sharePermissions | Where-Object { $_.IdentityName -eq "$domainName\$($user.SamAccountName)" -and $_.ObjectType -eq "user" }
    $groupAccess = $sharePermissions | Where-Object { $_.IdentityName -in $groupIdentities -and $_.ObjectType -eq "group" }

    # 合并并去重
    $allAccess = ($directAccess + $groupAccess) | Select-Object -Unique ShareName, SharePath, AccessRight

    foreach ($access in $allAccess) {
        [PSCustomObject]@{
            UserName      = $user.Name
            SamAccountName = $user.SamAccountName
            ShareName     = $access.ShareName
            SharePath     = $access.SharePath
            AccessRight   = $access.AccessRight
            AccessSource  = if ($access -in $directAccess) { "Direct Permission" } else { "Group Inheritance" }
        }
    }
}

# 导出用户访问报告
$userAccessReports | Export-Csv -Path "AD_User_Share_Access_Report.csv" -NoTypeInformation -Encoding UTF8

步骤4:生成组专属访问报告

如果需要单独导出组的共享权限记录,可直接过滤基础权限列表:

$groupPermissions = $sharePermissions | Where-Object { $_.ObjectType -eq "group" }
$groupPermissions | Export-Csv -Path "AD_Group_Share_Permissions.csv" -NoTypeInformation -Encoding UTF8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:53:12