如何用PowerShell提取多ExchangeGuid并批量执行邮箱恢复请求
批量处理O365异常邮箱的恢复请求脚本方案
核心思路
直接操作PowerShell返回的对象属性提取ExchangeGuid,避免解析格式化输出的字符串,同时通过循环批量处理用户。
单个用户处理脚本
# 获取该用户所有软删除邮箱的ExchangeGuid(自动存入数组) $softDeletedGuids = Get-Mailbox -SoftDeletedMailbox -Identity blahblah@itsasecret.edu | Select-Object -ExpandProperty ExchangeGuid # 获取当前活跃邮箱的ExchangeGuid $activeMailboxGuid = (Get-Mailbox blahblah@itsasecret.edu).ExchangeGuid # 遍历每个软删除邮箱Guid,创建恢复请求 foreach ($guid in $softDeletedGuids) { New-MailboxRestoreRequest -SourceMailbox $guid -TargetMailbox $activeMailboxGuid -AllowLegacyDNMismatch }
批量处理脚本(从CSV读取用户列表)
假设你有一个CSV文件(比如users.csv),包含一列UserPrincipalName,存储所有需要处理的用户邮箱地址:
# 导入用户列表 $userList = Import-Csv -Path "C:\YourPath\users.csv" foreach ($user in $userList) { $upn = $user.UserPrincipalName # 捕获异常,避免单个用户出错中断整个脚本 try { # 获取软删除邮箱Guid数组 $softDeletedGuids = Get-Mailbox -SoftDeletedMailbox -Identity $upn -ErrorAction Stop | Select-Object -ExpandProperty ExchangeGuid } catch { Write-Warning "用户 $upn 软删除邮箱信息获取失败:$_" continue } try { # 获取活跃邮箱Guid $activeMailboxGuid = (Get-Mailbox -Identity $upn -ErrorAction Stop).ExchangeGuid } catch { Write-Warning "用户 $upn 活跃邮箱信息获取失败:$_" continue } # 批量创建恢复请求 foreach ($guid in $softDeletedGuids) { try { New-MailboxRestoreRequest -SourceMailbox $guid -TargetMailbox $activeMailboxGuid -AllowLegacyDNMismatch -ErrorAction Stop Write-Host "用户 $upn 已创建从Guid $guid 到 $activeMailboxGuid 的恢复请求" } catch { Write-Warning "用户 $upn 恢复请求创建失败(来源Guid:$guid):$_" } } }
关键说明
- 避免使用
fl *exchangeguid*提取Guid:格式化输出是面向人类阅读的,直接操作对象属性能直接得到结构化的数组,无需额外解析字符串。 -AllowLegacyDNMismatch参数:由于是新旧邮箱Guid不匹配的场景,该参数可绕过LegacyDN不一致的限制,确保恢复请求正常执行。- 异常处理:通过
try/catch和-ErrorAction Stop捕获错误,保证批量处理时单个用户的问题不会导致整个脚本终止。
内容的提问来源于stack exchange,提问作者Dazormiq
相关产品推荐
相关产品推荐

