解决O365迁移问题:Exchange通讯组移除无邮箱用户的PowerShell方案
移除通讯组中无PrimarySmtpAddress的用户并导出名单
PowerShell批量处理脚本
以下脚本可自动遍历所有通讯组,移除其中PrimarySmtpAddress为空的成员,并将被移除用户的信息导出到CSV文件:
# 定义导出文件路径,可根据需求修改 $exportPath = "C:\Temp\RemovedGroupMembers.csv" # 自动创建目标文件夹(如果不存在) $folderPath = Split-Path -Path $exportPath -Parent if (-not (Test-Path -Path $folderPath)) { New-Item -Path $folderPath -ItemType Directory | Out-Null } # 初始化存储被移除用户信息的数组 $removedMembers = @() # 遍历所有通讯组(如需指定特定组,替换为 Get-DistributionGroup -Identity "组名称1","组名称2") Get-DistributionGroup | ForEach-Object { $currentGroup = $_ # 获取当前通讯组的所有成员 $groupMembers = Get-DistributionGroupMember -Identity $currentGroup.Identity -ResultSize Unlimited # 筛选出无PrimarySmtpAddress的成员 $invalidMembers = $groupMembers | Where-Object { $_.PrimarySmtpAddress -eq $null -or $_.PrimarySmtpAddress -eq "" } if ($invalidMembers.Count -gt 0) { foreach ($member in $invalidMembers) { # 移除成员(-Confirm:$false 跳过确认提示,如需手动确认可删除此参数) Remove-DistributionGroupMember -Identity $currentGroup.Identity -Member $member.Identity -Confirm:$false # 记录移除信息 $removedMembers += [PSCustomObject]@{ 通讯组名称 = $currentGroup.Name 通讯组邮箱 = $currentGroup.PrimarySmtpAddress 用户姓名 = $member.Name 用户标识 = $member.Identity 移除时间 = Get-Date -Format "yyyy-MM-dd HH:mm:ss" } } } } # 将移除信息导出到CSV文件 $removedMembers | Export-Csv -Path $exportPath -Encoding UTF8 -NoTypeInformation Write-Host "操作完成,被移除用户名单已导出至:$exportPath"
脚本使用说明
- 权限要求:需以Exchange管理员身份打开Exchange Management Shell执行脚本
- 指定通讯组:如果只需处理特定通讯组,将
Get-DistributionGroup替换为Get-DistributionGroup -Identity "你的组名",多个组用逗号分隔即可 - 预览模式:若想先查看待移除用户再执行操作,可先移除
Remove-DistributionGroupMember相关代码,仅运行筛选和输出部分 - 编码设置:脚本使用UTF8编码导出CSV,避免中文乱码问题
手动移除方法
如果仅需处理少量通讯组,也可以手动操作:
- Exchange管理中心(EAC):找到目标通讯组,进入「成员」页面,筛选出无邮箱地址的用户,选中后点击「移除」
- PowerShell单组处理:
# 查看目标组内无PrimarySmtpAddress的成员 Get-DistributionGroupMember "目标组名称" | Where-Object { $_.PrimarySmtpAddress -eq $null -or $_.PrimarySmtpAddress -eq "" } # 确认后执行移除 Get-DistributionGroupMember "目标组名称" | Where-Object { $_.PrimarySmtpAddress -eq $null -or $_.PrimarySmtpAddress -eq "" } | Remove-DistributionGroupMember -Identity "目标组名称" -Confirm:$false
内容的提问来源于stack exchange,提问作者pugster
相关产品推荐
相关产品推荐

