Назад | Перейти на главную страницу

Сценарий PowerShell в Exchange 2013 для получения списка ошибок размеров почтовых ящиков

EDIT: похоже, проблема связана с ролями администратора Exchange. Когда мой руководитель обновил наш сервер до Exchange 2013, похоже, что моя учетная запись не была добавлена ​​ни к одному из них. Это также объясняет, почему я никогда не мог войти в EAC со своей учетной записью. Я обновил роли администратора, и мои предыдущие скрипты теперь работают.

Когда я использую приведенный ниже сценарий, он возвращает информацию только мне.

Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Sort-Object TotalItemSize -Descending | Select-Object DisplayName,TotalItemSize

Я также пробовал следующие два сценария, но оба возвращаются с ошибками, что параметры -Server или -Database не могут быть найдены.

Get-MailboxStatistics -Server SERVERNAME | Sort-Object TotalItemSize -Descending | ft DisplayName,@{label=”TotalItemSize(MB)”;expression={$_.TotalItemSize.Value.ToMB()}},ItemCount -auto

Get-MailboxStatistics -database "DATABASENAME" | Sort-Object TotalItemSize -Descending | ft DisplayName,@{label=”TotalItemSize(MB)”;expression={$_.TotalItemSize.Value.ToMB()}},ItemCount -auto

Я пробовал запускать Exchange Management Powershell от имени администратора, а также сначала использовать "#Enable Exchange cmdlets", но ни один из них не помог решить проблему.

Сообщите мне, если потребуется какая-либо другая информация, и заранее спасибо.

Обратите внимание на самую последнюю строку, если вы не видите на экране того, что, по вашему мнению, вы должны видеть. Не могу вспомнить, написал ли я это сам или адаптировал (много лет назад) из того, что нашел в Интернете. Также работает в Exchange 2010 (если вы перейдете на V14). Если вы откроете окно PowerShell Exchange, вы можете пропустить часть, которая подключается к Exchange. Я также оставил там свою тестовую линию.

# Make powershell connection to Exchange
. 'E:\Program Files\Microsoft\Exchange Server\V15\bin\RemoteExchange.ps1'


$AllMailboxes = @()
$Mailboxes = Get-Mailbox -ResultSize Unlimited | Select DisplayName, Database, IssueWarningQuota, ProhibitSendQuota, ProhibitSendReceiveQuota, RetainDeletedItemsFor, Alias
#$Mailboxes = Get-Mailbox -ResultSize 10 | Select DisplayName, Database, IssueWarningQuota, ProhibitSendQuota, ProhibitSendReceiveQuota, RetainDeletedItemsFor, Alias
foreach ($Mailbox in $Mailboxes){
    $MailboxStats = "" |Select  DisplayName,Database,IssueWarningQuota,ProhibitSendQuota,ProhibitSendReceiveQuota,TotalItemSizeInMB,ItemCount,StorageLimitStatus,RetainDeletedItemsFor
    $Stats = Get-MailboxStatistics -Identity $Mailbox.Alias
    $MailboxStats.DisplayName = $Mailbox.DisplayName 
    $MailboxStats.Database = $Mailbox.Database
    if ($Mailbox.IssueWarningQuota -eq "unlimited") {$MailboxStats.IssueWarningQuota = "database default"}
    else {$MailboxStats.IssueWarningQuota = $Mailbox.IssueWarningQuota}
    if ($Mailbox.ProhibitSendQuota -eq "unlimited") {$MailboxStats.ProhibitSendQuota = "database default"}
    else {$MailboxStats.ProhibitSendQuota = $Mailbox.ProhibitSendQuota}
    if ($Mailbox.ProhibitSendReceiveQuota -eq "unlimited") {$MailboxStats.ProhibitSendReceiveQuota = "database default"}
    else {$MailboxStats.ProhibitSendReceiveQuota = $Mailbox.ProhibitSendReceiveQuota}
    if ($Stats.TotalItemSize -eq $NULL){$MailboxStats.TotalItemSizeInMB = 0}
    else {$MailboxStats.TotalItemSizeInMB = $Stats.TotalItemSize.Value.ToMB()}
    $MailboxStats.ItemCount = $Stats.ItemCount
    $MailboxStats.StorageLimitStatus = $Stats.StorageLimitStatus
    $MailboxStats.RetainDeletedItemsFor = $Mailbox.RetainDeletedItemsFor
    $AllMailboxes += $MailboxStats
}
$AllMailboxes | Sort-Object StorageLimitStatus,TotalItemSizeInMB -descending | Export-Csv E:\Temp\mailboxsizes.csv -NoTypeInformation

Простой способ сделать это - направить все ваши базы данных по запросу:

get-MailboxDatabase | Get-MailboxStatistics | Sort-Object TotalItemSize -Descending | ft DisplayName,@{label=”TotalItemSize(MB)”;expression={$_.TotalItemSize.Value.ToMB()}},ItemCount -auto