将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_Group1 | AD_Group1 |
| AD_Group2 | |
| AD_Group3 |
XLSX效果
生成的Excel文件包含两个工作表,分别以两个用户的名称命名,每个工作表内列出该用户的所有AD组,方便切换查看和排序。
内容的提问来源于stack exchange,提问作者Streko
相关产品推荐
相关产品推荐

