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

Powershell: получение статистики Exchange и ограничения (вывода)

Я пытаюсь собрать статистику почтовых ящиков для всех почтовых ящиков в нашей организации, экспортируя ее в файл Excel / CSV. Это код, который я придумал / собрал до сих пор:

Get-Mailbox -ResultSize Unlimited |Get-MailboxStatistics | where {$_.ObjectClass -eq “Mailbox”} | Sort-Object TotalItemSize -Descending |FT @{label=”User”;expression={$_.DisplayName}},ServerName,Database,@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}} |Out-File -Append -FilePath C:\Users\Public\Documents\MailboxSize.log

  1. При использовании Export-CSV записанный файл не содержит запрошенной информации / вывода. Он показывает только тарабарщину
  2. При запуске вышеуказанного сценария я сталкиваюсь с сообщением Powershell «Разрешенный максимум 524288000», и только (небольшая) часть запрошенных данных регистрируется.

Можете ли вы помочь мне решить два сделанных замечания?

= = = = = =

Это то, что я использую сейчас. Он предоставляет мне запрошенные детали и результаты. Хотя я ищу дальнейшую оптимизацию этой части, в более широком плане я доволен тем фактом, что это однострочная команда:

Get-Recipient -ResultSize Unlimited |Where {$_.RecipientType –eq “UserMailbox”} |Get-MailboxStatistics | Sort-Object TotalItemSize –Descending |Select-Object @{label=”User”;expression={$_.DisplayName}},@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}},@{label=”Items”;expression={$_.ItemCount}},@{label=”Storage Limit”;expression={$_.StorageLimitStatus}} |Export-CSV -NoTypeInformation -Path c:\users\public\documents\$Filename

Мне нужно настроить PSSessionConfiguration: Set-PSSessionConfiguration -name microsoft.powershell -MaximumReceivedObjectSizeMB 800 -Force

Вы не можете использовать Export-CSV после Format-Table в вашем трубопроводе. Если вы хотите использовать Export-CSV, измените свою Format-Table на Select-Object.

Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | where {$_.ObjectClass -eq “Mailbox”} | Sort-Object TotalItemSize -Descending | Select-Object @{label=”User”;expression={$_.DisplayName}},ServerName,Database,@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}} | Export-CSV "C:\Users\Public\Documents\MailboxSize.log" -notypeinformation

В настоящее время вы не получаете все почтовых ящиков в вашей организации. Ваш запрос отфильтровывает почтовые ящики обнаружения, почтовые ящики комнат, почтовые ящики оборудования и т. Д. Возможно, вы уже осознали этот факт, но я просто хотел прояснить его. Если вы хотите повысить производительность своего запроса, вы можете отфильтровать эти посторонние поля в начале конвейера, изменив параметр Get-Mailbox командлет для фильтрации RecipientTypeDetails.

Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize Unlimited

Что касается лимита 524288000, у вас есть несколько вариантов. Вы можете изменить ограничение в файле web.config для свойства maxAllowedContentLength, но я бы не стал предлагать этого, поскольку мы действительно не знаем, какова верхняя граница, с которой вам потребуется выполнить этот скрипт. Более того, это может измениться в будущем, когда вы добавите больше почтовых ящиков, и ваш скрипт снова сломается. Установка слишком высокого лимита также может вызвать некоторые проблемы.

Другой вариант - обрабатывать данные по частям. Поскольку вы в конечном итоге экспортируете в CSV, а собственного -Приложить параметр в Export-CSV, вам придется использовать обходной путь. Дмитрий Сотников создал обертка для Export-CSV командлет, реализующий эту функцию и позволяющий построчно экспортировать в CSV.

Обновить: В PowerShell 3.0, Export-CSV имеет параметр добавления.

Ваша команда будет изменена на что-то вроде следующего:

$sortedStats = Get-Recipient -ResultSize Unlimited -RecipientTypeDetails UserMailbox | Get-MailboxStatistics | Sort-Object TotalItemSize -Descending

foreach ($s in $sortedStats) {
    $s | Select-Object @{label=”User”;expression={$_.DisplayName}},ServerName,Database,@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}} | Export-CSV "C:\Users\Public\Documents\MailboxSize.csv" -notypeinformation -Append
}

С моей стороны все это совершенно не проверено, но я думаю, что это работает именно так. Будет хит производительности. Мне было бы интересно узнать ваши результаты, если вы в конечном итоге пойдете по этому пути.