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

从通配符匹配AD组导出成员属性并添加所属组信息

解决AD组成员导出时附带所属组信息的问题

我来帮你调整PowerShell代码,让每条成员记录都带上对应的所属AD组信息~

核心思路

原代码的问题是在获取用户属性时,没有把当前遍历的组名关联进去。我们可以通过自定义计算属性的方式,把组名添加到每条用户记录中,同时还能优化代码效率,只获取你需要的用户属性。

优化后的完整代码

# 第一步:获取所有名称以"Group"开头的AD组
$targetGroups = Get-ADGroup -Filter {Name -like "Group*"} | Select-Object Name

# 初始化一个数组用来存储最终结果(可选,方便后续导出)
$exportResults = @()

# 遍历每个目标组
foreach ($group in $targetGroups) {
    # 获取组的递归成员,过滤只保留用户对象(排除组、计算机等)
    $groupMembers = Get-ADGroupMember -Identity $group.Name -Recursive | 
        Where-Object {$_.objectClass -eq "user"}

    # 遍历每个成员用户
    foreach ($member in $groupMembers) {
        # 获取用户的关键属性(按需指定,避免获取所有属性拖慢速度)
        $userDetails = Get-ADUser -Identity $member.SamAccountName -Properties EmailAddress, LastLogonDate
        
        # 构造包含组信息的自定义对象
        $record = [PSCustomObject]@{
            所属AD组 = $group.Name
            用户名 = $userDetails.Name
            账号名 = $userDetails.SamAccountName
            邮箱地址 = $userDetails.EmailAddress
            账号状态 = if ($userDetails.Enabled) {"已启用"} else {"已禁用"}
            最后登录时间 = $userDetails.LastLogonDate
        }

        # 将记录加入结果数组
        $exportResults += $record
    }
}

# 导出结果到CSV文件(可选,按需启用)
$exportResults | Export-Csv -Path "AD组成员列表.csv" -Encoding UTF8 -NoTypeInformation

关键细节说明

  • 过滤成员类型:用Where-Object {$_.objectClass -eq "user"}确保只处理用户成员,避免把组或计算机也包含进来(如果不需要过滤可以删除这一行)。
  • 自定义属性:通过[PSCustomObject]构造记录,把当前组名$group.Name作为固定字段加入,让每条记录都能关联到所属组。
  • 属性按需获取:Get-ADUser的-Properties参数只指定需要的属性(比如邮箱、最后登录时间),比-Properties *更高效。
  • 导出CSV:最后一行代码可以把结果导出为CSV文件,方便后续查看或处理。

如果需要调整输出的属性,直接修改[PSCustomObject]里的字段和Get-ADUser的-Properties参数即可~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:32:56