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

如何用PowerShell移除Azure AD/Exchange Online中匹配特定域名的邮箱地址?

批量移除Exchange Online通讯组中旧域名的所有邮箱地址

原脚本无法用通配符批量移除smtp:*@olddomain.com格式的地址,核心原因是Set-DistributionGroup的-EmailAddresses参数不支持通配符移除操作,必须先获取具体的地址列表再批量处理。以下是解决方案:

步骤1:连接到Exchange Online PowerShell

先确保已建立Exchange Online会话:

Connect-ExchangeOnline

步骤2:修改后的批量处理脚本

该脚本会先获取每个通讯组的所有邮箱地址,筛选出旧域名相关地址后批量移除:

$DefaultDomain = 'NewCompany.onmicrosoft.com'
$OldDomain = 'olddomain.com'

# 导入通讯组列表
$DistributionGroups = Import-Csv -LiteralPath C:\Source-DL.csv

foreach ($dl in $DistributionGroups) {
    Write-Host "Processing DL: $($dl.DisplayName)" -ForegroundColor Yellow
    
    try {
        # 获取当前通讯组的所有邮箱地址(含主地址和次要地址)
        $currentAddresses = (Get-DistributionGroup -Identity $dl.Alias -ErrorAction Stop).EmailAddresses
        
        # 筛选出所有旧域名的地址(自动匹配SMTP/smtp前缀格式)
        $addressesToRemove = $currentAddresses | Where-Object { $_ -like "*@$OldDomain" }
        
        if ($addressesToRemove) {
            Write-Host "Removing $($addressesToRemove.Count) old addresses from $($dl.DisplayName)" -ForegroundColor Cyan
            
            # 构造移除参数哈希表
            $removeParams = @{ Remove = $addressesToRemove }
            
            # 更新通讯组:设置新主地址 + 批量移除旧域名地址
            Set-DistributionGroup -Identity $dl.Alias `
                -WindowsEmailAddress "$($dl.Alias)@$DefaultDomain" `
                -EmailAddresses $removeParams `
                -ErrorAction Stop
            
            Write-Host "Successfully updated $($dl.DisplayName)" -ForegroundColor Green
        }
        else {
            Write-Host "No old addresses found for $($dl.DisplayName)" -ForegroundColor Green
        }
    }
    catch {
        Write-Host "Failed to process $($dl.DisplayName): $_" -ForegroundColor Red
    }
}

关键细节说明

  • 通配符限制:Set-DistributionGroup的Remove操作仅接受具体地址值,无法识别通配符,因此必须先通过Get-DistributionGroup拉取完整地址列表再筛选。
  • 筛选逻辑:$_ -like "*@$OldDomain"会匹配所有旧域名结尾的地址,不管是主地址(大写SMTP:前缀)还是次要地址(小写smtp:前缀),-like运算符不区分大小写。
  • 错误处理:try/catch块可捕捉处理失败的通讯组,避免脚本中途中断,方便排查问题。
  • CSV要求:确保CSV文件包含Alias和DisplayName列,Alias必须是通讯组的有效别名,否则无法定位目标对象。

内容的提问来源于stack exchange,提问作者Senior Systems Engineer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:25:22