如何从WS2012 AD的pscustomobject中移除首个唯一邮箱条目保留重复项?
提取AD中重复邮箱的非首个条目并生成虚拟邮箱
核心思路
先将AD用户按mail属性分组,筛选出成员数大于1的重复组;对每个重复组跳过首个条目,保留所有后续重复用户;最后为这些用户生成telephoneNumber@company.com格式的虚拟邮箱,构建目标PSCustomObject。
完整PowerShell脚本
# 获取AD中拥有邮箱属性的用户,可按需调整过滤条件 $adUsers = Get-ADUser -Filter {mail -like "*"} -Properties mail, telephoneNumber, Name, SamAccountName # 按邮箱分组,筛选出存在重复的邮箱组(成员数>1) $duplicateMailGroups = $adUsers | Group-Object -Property mail | Where-Object {$_.Count -gt 1} # 遍历重复组,跳过首个条目,收集重复用户并生成虚拟邮箱 $duplicateUsersWithVirtualMail = foreach ($group in $duplicateMailGroups) { # 跳过组内第一个用户,仅保留后续重复项 $group.Group | Select-Object -Skip 1 | ForEach-Object { # 生成虚拟邮箱,若telephoneNumber为空则用SamAccountName兜底 $virtualMail = if ($_.telephoneNumber) { "$($_.telephoneNumber)@company.com" } else { "$($_.SamAccountName)@company.com" } # 构建目标PSCustomObject [PSCustomObject]@{ Name = $_.Name SamAccountName = $_.SamAccountName OriginalMail = $_.mail TelephoneNumber = $_.telephoneNumber VirtualMailAddress = $virtualMail } } } # 输出结果,可按需导出到CSV $duplicateUsersWithVirtualMail | Format-Table -AutoSize # $duplicateUsersWithVirtualMail | Export-Csv -Path "C:\Temp\DuplicateADUsers.csv" -NoTypeInformation
关键代码说明
Group-Object -Property mail:按邮箱属性对用户分组,快速定位重复邮箱Where-Object {$_.Count -gt 1}:仅保留包含多个用户的重复邮箱组Select-Object -Skip 1:跳过每个重复组的首个用户,只保留后续需要处理的重复条目- 虚拟邮箱兜底逻辑:当用户无
telephoneNumber时,用SamAccountName生成虚拟邮箱,避免空值异常
内容的提问来源于stack exchange,提问作者Zombievirus
相关产品推荐
相关产品推荐

