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

PowerShell自定义列输出:将AD组名设为列名展示活跃成员

实现AD组活跃用户按组列显示的解决方案

要实现将AD组名作为列名、活跃用户对应列下方显示的需求,你可以通过先收集各组活跃用户数据,再构造结构化表格对象的方式完成,替代原有的流式输出方式。以下是具体实现代码及说明:

代码实现

# 导入AD组列表CSV
$adGroups = Import-Csv -Path C:\Source\Listofusers.csv

# 初始化哈希表,存储每个组对应的活跃用户SamAccountName列表
$groupActiveUsers = @{}

# 遍历每个AD组,收集活跃用户数据
foreach ($group in $adGroups) {
    $groupName = $group.ADGroups
    # 递归获取组内用户,筛选活跃状态并提取账号名
    $activeUsers = Get-ADGroupMember -Identity $groupName -Recursive |
        Where-Object { $_.objectClass -eq 'user' } |
        Get-ADUser -Properties Enabled |
        Where-Object { $_.Enabled -eq $true } |
        Select-Object -ExpandProperty SamAccountName
    
    $groupActiveUsers[$groupName] = $activeUsers
}

# 确定表格行数(取成员最多的组的用户数)
$maxRowCount = $groupActiveUsers.Values.Count | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum

# 构建每行的表格数据,确保每个组的用户对应到列
$results = for ($i = 0; $i -lt $maxRowCount; $i++) {
    $rowProperties = [ordered]@{}
    foreach ($groupName in $groupActiveUsers.Keys) {
        # 当前行索引存在对应用户则取值,否则留空
        $rowProperties[$groupName] = if ($i -lt $groupActiveUsers[$groupName].Count) {
            $groupActiveUsers[$groupName][$i]
        } else {
            ''
        }
    }
    # 转换为自定义对象,用于生成表格
    [PSCustomObject]$rowProperties
}

# 在控制台输出格式化表格
$results | Format-Table -AutoSize

# 可选:将结果导出为CSV文件
# $results | Export-Csv -Path "C:\Output\AD_Active_Users_by_Group.csv" -NoTypeInformation

代码说明

  1. 数据收集阶段:用哈希表$groupActiveUsers存储每个AD组及其对应的活跃用户列表,避免重复查询,同时方便后续按组提取数据。
  2. 行数量确定:通过统计所有组的成员数最大值,确保所有组的用户都能在表格中对应到行,成员较少的组在后续行中留空。
  3. 表格构造:循环生成每行数据,为每个组列填充对应位置的用户账号,最终输出结构化的表格(或导出为CSV)。

这种方式能直接满足你“组名为列名,成员列在下方”的需求,输出结果比原有的分隔线形式更规整,也便于后续处理或导出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:48:39