Как вам должно быть известно, размер Mailbox Database в Exchange – не равен размеру файла EDB, который он занимает на диске. Это связано с фрагментацией, и прочими процессами, но речь не о том. Возник вопрос, сколько же реально полезной информации находится в базах, и если запускать её дефрагментацию, то сколько места освободится на диске. Как итог, был написан простенький скриптик на PowerShell, который проходится по всем базам и выводит их размер занимаемый на диске, размер всех почтовых ящиков в них, а так же размер почтовых ящиков и удаленных элементов.
Текст скрипта:
$res = @()
$databases = get-mailboxdatabase -server ServerName | select-object -Property Name
foreach ($database in $databases) {
$all = $null
$all=Get-MailboxStatistics -database $database.name | select-object *size*
$totalsize=0
$totalsizewithDeleted=0
$realSize=0
foreach ($single in $all) {
$totalsize+=$single.totalitemsize.Value.ToMB()
$totalsizewithDeleted+=$single.totalitemsize.Value.ToMB()+$single.totaldeleteditemsize.Value.ToMB()
}
$realSize=get-mailboxdatabase -status $database.name | select-object *size*
$realSize=[math]::Round($realSize.DatabaseSize.toMB()/1024)
$totalsize=[math]::Round($totalsize/1024)
$totalsizewithDeleted=[math]::Round($totalsizewithDeleted/1024)
$line = "" | Select Name, RealSize, Size, SizeWithDeleted
$line.Name = $database.name.ToString();
$line.Size = $totalsize
$line.SizeWithDeleted = $totalsizewithDeleted
$line.RealSize = $realSize
$res+=$line
}
$res
#пример вывода
#$res | Sort-Object -property RealSize -Descending | fl
В целом ни чего сложного тут нет. В самом начаале задаем имя сервера, на котором необходимо узнать размеры баз. Простым перебором суммируем размеры ящиков во всех базах на этом сервере, потом аналогичная процедура, но уже как для ящиков и так и для удаленных элементов. И после этого смотрим реальный размер базы. Вывод, в ГБ, записываем в объект, что позволит в будущем проводить какие-то операции с этим самым выводом, например сортировку, или еще что-то.

