PowerShell提取Exchange邮箱大小数值用于共享邮箱转换校验
解决Exchange Online邮箱转共享邮箱的容量检查问题
核心思路
Get-MailboxStatistics返回的TotalItemSize是结构化的ByteQuantifiedSize对象,无需解析字符串,直接通过对象方法就能获取GB单位的数值,这种方式更稳定可靠,不会因输出格式变化失效。
完整脚本实现
# 读取目标用户UPN $upn = Read-Host -Prompt "Input the UPN of the user you would like to convert. ex. User@Example.com ->" try { # 获取邮箱统计信息 $mailboxStats = Get-MailboxStatistics $upn -ErrorAction Stop # 将总容量转换为GB并保留1位小数 $totalSizeGB = [math]::Round($mailboxStats.TotalItemSize.Value.ToGB(), 1) # 容量检查逻辑 if ($totalSizeGB -lt 50) { # 执行转换为共享邮箱操作 Set-Mailbox $upn -Type Shared -ErrorAction Stop Write-Host "成功将用户邮箱 $upn 转换为共享邮箱,当前容量:$totalSizeGB GB" -ForegroundColor Green } else { Write-Host "转换失败:邮箱 $upn 容量为 $totalSizeGB GB,超过50GB限制" -ForegroundColor Red } } catch { Write-Host "操作出错:$_" -ForegroundColor Red }
关键代码说明
$mailboxStats.TotalItemSize.Value.ToGB():直接将字节数转换为GB单位的数值,跳过字符串解析步骤[math]::Round(..., 1):保留1位小数,和你看到的输出格式保持一致try/catch块:处理用户不存在、权限不足等异常场景
替代方案(字符串解析,不推荐)
如果因环境限制必须解析字符串,可通过正则提取数值:
$mailboxsize = Get-MailboxStatistics $upn | Select-Object -ExpandProperty TotalItemSize $sizeMatch = [regex]::Match($mailboxsize, '(\d+\.\d+) GB') if ($sizeMatch.Success) { $totalSizeGB = [double]$sizeMatch.Groups[1].Value # 后续判断逻辑同上述脚本 }
注意:字符串解析依赖固定输出格式,若Exchange更新显示规则会直接失效,优先推荐对象方法。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

