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

将AD组成员身份导出至独立列的PowerShell实现需求

AD用户组成员身份对比脚本优化

需求说明

需要通过PowerShell生成CSV或XLSX文件,对比两个AD用户的组成员身份。原有脚本导出为单列列表,当用户组数量差异较大时对比不便,要求输出为双列格式(用户名在顶部,组分属两列)或独立工作表形式。

改进后的脚本(CSV双列对比版)

# 定义获取用户AD组的函数,包含错误处理
function Get-UserADGroups {
    param([string]$Username)
    try {
        $user = Get-ADUser -Identity $Username -Properties Name
        $groups = Get-ADPrincipalGroupMembership $user | Select-Object -ExpandProperty Name | Sort-Object
        return @{
            Username = $user.Name
            Groups   = $groups
        }
    }
    catch {
        Write-Warning "无法找到用户 $Username,请检查ID并重试。"
        return @{
            Username = "[$Username 不存在]"
            Groups   = @()
        }
    }
}

# 获取用户输入
$User1 = Read-Host "请输入第一个AD用户ID"
$User2 = Read-Host "请输入第二个AD用户ID"
$CSVFile = "AD用户组对比_$(Get-Date -Format 'yyyyMMddHHmmss').csv"

# 获取两个用户的组信息
$user1Data = Get-UserADGroups -Username $User1
$user2Data = Get-UserADGroups -Username $User2

# 生成所有组的唯一集合(包含两个用户的所有组)
$allGroups = ($user1Data.Groups + $user2Data.Groups) | Select-Object -Unique | Sort-Object

# 构建对比结果数组
$comparisonResult = @()
# 添加用户名标题行
$comparisonResult += [PSCustomObject]@{
    $user1Data.Username = $user2Data.Username
}
# 添加每个组的对比行
foreach ($group in $allGroups) {
    $comparisonResult += [PSCustomObject]@{
        $user1Data.Username = if ($user1Data.Groups -contains $group) { $group } else { "" }
        $user2Data.Username = if ($user2Data.Groups -contains $group) { $group } else { "" }
    }
}

# 导出到CSV
$comparisonResult | Export-Csv -Path $CSVFile -NoTypeInformation -Encoding UTF8

Write-Host "对比结果已导出到 $CSVFile"

可选方案:XLSX独立工作表版

如果更倾向于分工作表查看,可使用ImportExcel模块(需先执行Install-Module -Name ImportExcel -Scope CurrentUser安装),替换上述脚本的导出部分为:

$XLSXFile = "AD用户组对比_$(Get-Date -Format 'yyyyMMddHHmmss').xlsx"

# 导出第一个用户的组到独立工作表
[PSCustomObject]@{组名 = $user1Data.Groups} | Export-Excel -Path $XLSXFile -WorksheetName $user1Data.Username -AutoSize

# 导出第二个用户的组到独立工作表
[PSCustomObject]@{组名 = $user2Data.Groups} | Export-Excel -Path $XLSXFile -WorksheetName $user2Data.Username -AutoSize -Append

Write-Host "对比结果已导出到 $XLSXFile,每个用户的组在独立工作表中。"

输出效果

CSV双列格式示例

UserA名称UserB名称
AD_Group1AD_Group1
AD_Group2
AD_Group3

XLSX效果

生成的Excel文件包含两个工作表,分别以两个用户的名称命名,每个工作表内列出该用户的所有AD组,方便切换查看和排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:36:23