Я пытаюсь собрать статистику почтовых ящиков для всех почтовых ящиков в нашей организации, экспортируя ее в файл 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
Можете ли вы помочь мне решить два сделанных замечания?
= = = = = =
Это то, что я использую сейчас. Он предоставляет мне запрошенные детали и результаты. Хотя я ищу дальнейшую оптимизацию этой части, в более широком плане я доволен тем фактом, что это однострочная команда:
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
}
С моей стороны все это совершенно не проверено, но я думаю, что это работает именно так. Будет хит производительности. Мне было бы интересно узнать ваши результаты, если вы в конечном итоге пойдете по этому пути.