Powershell获取Exchange 邮箱用户配额
admin
2023-02-03 18:20:52
0
    客户场景:为很多用户单独配置过邮箱配额,想重新规划,现需要导致所有用户实际容量清单
    实现方式:直接上代码

#加载Exchange命令
Add-PSSnapin Microsoft.ex*
#主命令
[array]$output = "" | Select Name,ProhibitSendQuota,DBName
$DBs = Get-MailboxDatabase | Select Name,ProhibitSendQuota
foreach ($DB in $DBs) {
[string]$DBQuota = $DB.ProhibitSendQuota
[string]$DBName = $DB.Name
Write-Host "Database $DBName's quota is $DBQuota"
$Mails = Get-Mailbox -Database $DBName | Select Name,ProhibitSendQuota
foreach ($Mail in $Mails) {
if ($Mail.ProhibitSendQuota -eq "Unlimited") {
[string]$MailQuota = $DBQuota
}
else {
[string]$MailQuota = $Mail.ProhibitSendQuota
}

$Temp = "" | Select Name,ProhibitSendQuota,DBName
$Temp.Name = $Mail.Name
$Temp.ProhibitSendQuota = $MailQuota
$Temp.DBName = $DBName
#$Temp

$output += $Temp

}
}
$output | Export-Csv MailQuota.csv -NoTypeInformation -Encoding UTF8
输出结果:
Powershell获取Exchange 邮箱用户配额
与预期对比:
Powershell获取Exchange 邮箱用户配额
结论:如果为用户配置了不限制容量,则不能正常获取(客户实际环境中仅为董事长有配置无限制,手动修正,符合客户需求),欢迎帮解决此bug

    Update:
    客户提出了几点疑问:
    1. 这个结果我无法看出哪些用户是有手动配置过的
    2. 我不知道用户使用了多少,用了多少空间
    3. 需要最后登录时间
    4. 我有很多Mail Server,如果我只想获取一台怎么办?
    5. 我在C盘打开的这个脚本,但这个脚本实际位置在D盘,这个输出文件输出到了C盘怎么办?需要输出到脚本所在的目录

针对以上,优化了脚本:

  1. 先直接上脚本
    param($Server)
    $outfile = $(Split-Path -Parent $MyInvocation.MyCommand.Definition) + "\" + (Get-Date -UFormat "%Y-%m-%d_%H-%M-%S") + ".csv"
    Write-Host $outfile
    [array]$output = "" | Select Name,DBName,UserQuota,DBQuota,ProhibitSendQuota,TotalItemSize,Use,LastLogonTime
    #Select Name,DBName,UserQuota,DBQuota,ProhibitSendQuota,TotalItemSize,Use
    Add-PSSnapin Microsoft.ex
    if($Server){
    $DBs = Get-MailboxDatabase -Server $Server| Select Name,ProhibitSendQuota
    } else {
    $DBs = Get-MailboxDatabase | Select Name,ProhibitSendQuota
    }
    foreach ($DB in $DBs) {
    [string]$DBQuota = $DB.ProhibitSendQuota
    [string]$DBName = $DB.Name
    Write-Host "Database $DBName's quota is $DBQuota"
    $Mails = Get-Mailbox -Database $DBName -ResultSize unlimited | Select SamaccountName,ProhibitSendQuota
    foreach ($Mail in $Mails) {
    if ($Mail.ProhibitSendQuota -eq "Unlimited") {
    [string]$MailQuota = $DBQuota
    }
    else {
    [string]$MailQuota = $Mail.ProhibitSendQuota
    }
    $TotalItemSize = Get-MailboxStatistics -Identity $Mail.SamaccountName | select TotalItemSize,LastLogonTime
    $TempA = $Mail.ProhibitSendQuota
    $Temp = "" | Select Name,DBName,UserQuota,DBQuota,ProhibitSendQuota,TotalItemSize,Use,LastLogonTime
    $Temp.Name = $Mail.SamaccountName
    $Temp.DBName = $DBName
    if ($TempA -eq "Unlimited") {
    $Temp.UserQuota = $TempA
    } else {
    #$Temp.UserQuota = $TempA.replace(" ","").split("(")[0]
    $Temp.UserQuota = $($TempA -replace " ").Split("(")[0]
    }
    $Temp.DBquota = $($DBQuota -replace " ").Split("(")[0]
    $Temp.ProhibitSendQuota = $($MailQuota -replace " ").Split("(")[0]
    $Temp.TotalItemSize = $($TotalItemSize.TotalItemSize -replace " ").Split("(")[0]
    $Temp.Use = ('{0:n2}' -f $($Temp.TotalItemSize / $Temp.ProhibitSendQuota
    100)) +'%'
    $Temp.LastLogonTime = $TotalItemSize.LastLogonTime
    #$Temp

$output += $Temp

}
}
#$output[1..$output.count]
$output[1..$output.count] | Export-Csv $outfile -NoTypeInformation -Encoding UTF8 -Force

  1. 输出结果
    Powershell获取Exchange 邮箱用户配额
  2. 脚本执扫方式
    a. 直接执行则获取所有用户
    b. .\xxx.ps1 -Server XX则获取指定Server上的DB

欢迎补充

相关内容

热门资讯

首次突破 屡创新高!一组数字解... 2026年上半年我国GDP同比增长4.7%经济韧性持续彰显在已经出炉的经济数据中更值得关注的还有“含...
男主播卖惨,66岁患癌老太花光... 今年3月,沈阳66岁的张阿姨在家养病期间刷视频时,被一名IP属地为湖北的男主播吸引。该主播主打演唱经...
松下智能马桶盖不喷水怎么回事 松下智能马桶盖不喷水怎么回事1、有时候新买的马桶在安装的时候工人有时候会不会告诉你需要开进水阀的,智...
松下智能马桶盖不喷水 1、有时候新买的马桶在安装的时候工人有时候会不会告诉你需要开进水阀的,智能马桶都是带有进水阀的,如果...
智能马桶盖不喷水故障维修方法 如果是出水口不喷水,先检查下是不是里面没水,或者水管出问题了,水管故障问题需找专业的维修师傅维修;若...
马桶水箱盖子碎了能换么 不能,建议更换整个水箱。方法:先检查排污管及产品内通道是否有异物;确定固定蹲便的安装位置、高度以及将...
洗衣机e1是什么故障 洗衣机e1是什么故障出现这个代码时,是表示洗衣机的进水时间超长了,洗衣机的进水系统发生了问题,比如,...
阿联酋航空发文致歉 7月23日,阿联酋航空发布致歉信:原计划于7月22日从迪拜飞往上海的阿联酋航空EK302航班,因恶劣...
给“南海仲裁案”递刀子的美国人... 执笔/李小飞刀7月12日晚,菲律宾内格罗斯东方省锡布兰镇的一处公寓内,突然响起一阵枪声,美国海洋生物...
特朗普称沙特加入《亚伯拉罕协议... △美国总统特朗普(资料图)当地时间7月23日,美国总统特朗普在社交媒体“真实社交”上发文表示,美国能...