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

如何从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:50:15