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

PowerShell AD审计脚本如何实现每行单个用户对应所属安全组

PowerShell AD组审计脚本格式调整方案

你的需求可直接实现,原脚本输出不符合SQL导入要求的核心原因是使用-join运算符将同组所有成员拼接成了单条逗号分隔的字符串,只需调整遍历逻辑,为每个组-成员对应关系单独生成输出行即可。

修正后可直接使用的脚本

Get-ADgroup -Filter 'Name -like "Security Group -*"' -SearchBase "OU=Groups,DC=ADAccess,DC=local" -Properties Members |
    Sort-Object -Property Name |
    ForEach-Object {
        $currentGroupName = $_.Name
        foreach ($memberDistinguishedName in $_.Members) {
            [PSCustomObject]@{
                name    = $currentGroupName
                Members = (Get-ADObject -Identity $memberDistinguishedName).Name
            }
        }
    } |
    Export-Csv -Path C:\AuditScript\Audit.csv -NoTypeInformation -Encoding UTF8

核心修改点

  • 删除了原脚本中将成员列表拼接为单字符串的-join ","逻辑
  • 遍历每个安全组时,先缓存当前组名称,再逐个遍历组内成员的可分辨名称,每匹配到一个成员就生成一条独立的结构化记录
  • 导出CSV时新增-Encoding UTF8参数,避免存在中文名称时导入SQL出现乱码
  • 最终输出的CSV每行对应一组安全组+单个成员的映射关系,和你给出的理想格式完全一致,可直接导入SQL表用于后续审计报告生成。

适配大环境的优化版本

如果域内存在已删除但未从组内清理的残留成员条目,可以加异常捕获避免脚本意外中断,同时标记异常条目方便后续排查:

Get-ADgroup -Filter 'Name -like "Security Group -*"' -SearchBase "OU=Groups,DC=ADAccess,DC=local" -Properties Members |
    Sort-Object -Property Name |
    ForEach-Object {
        $currentGroupName = $_.Name
        foreach ($memberDistinguishedName in $_.Members) {
            try {
                [PSCustomObject]@{
                    name    = $currentGroupName
                    Members = (Get-ADObject -Identity $memberDistinguishedName -ErrorAction Stop).Name
                }
            }
            catch {
                [PSCustomObject]@{
                    name    = $currentGroupName
                    Members = "异常残留成员: $memberDistinguishedName"
                }
            }
        }
    } |
    Export-Csv -Path C:\AuditScript\Audit.csv -NoTypeInformation -Encoding UTF8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:15:32