Powershell获取Exchange邮箱用户配额-创新互联
客户场景:为很多用户单独配置过邮箱配额,想重新规划,现需要导致所有用户实际容量清单
实现方式:直接上代码
#加载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
}
创新互联公司专注于企业
网络营销推广、网站重做改版、万秀网站定制设计、自适应品牌网站建设、
H5网站设计、
成都商城网站开发、集团公司官网建设、外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为万秀等各大城市提供网站开发制作服务。
$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
输出结果:
与预期对比:
结论:如果为用户配置了不限制容量,则不能正常获取(客户实际环境中仅为董事长有配置无限制,手动修正,符合客户需求),欢迎帮解决此bug
Update:
客户提出了几点疑问:
1. 这个结果我无法看出哪些用户是有手动配置过的
2. 我不知道用户使用了多少,用了多少空间
3. 需要最后登录时间
4. 我有很多Mail Server,如果我只想获取一台怎么办?
5. 我在C盘打开的这个脚本,但这个脚本实际位置在D盘,这个输出文件输出到了C盘怎么办?需要输出到脚本所在的目录
针对以上,优化了脚本:
- 先直接上脚本
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
- 输出结果
- 脚本执扫方式
a. 直接执行则获取所有用户
b. .\xxx.ps1 -Server XX则获取指定Server上的DB
欢迎补充
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网页标题:Powershell获取Exchange邮箱用户配额-创新互联
标题来源:
http://kswjz.com/article/dodhid.html
扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流