Потому что вы передали результаты Get-Mailbox в Get-MailboxStatistics.
Get-Mailbox возвращает объекты Microsoft.Exchange.Data.Directory.Management.Mailbox, которые содержат свойство PrimarySmtpAddress. Но как только вы передаете эти объекты в другой командлет, Get-MailboxStatistics в этом случае, остальная часть конвейера содержит результаты этого командлета. Таким образом, после запуска Get-MailboxStatistics конвейер содержит объекты Microsoft.Exchange.Data.Mapi.MailboxStatistics: эти объекты не имеют свойства PrimarySmtpAddress. Вам нужно будет сохранить PrimarySmtpAddress в переменной перед передачей объектов в конвейер; что-то вроде этого:
foreach ($mailbox in (Get-Mailbox -ResultSize Unlimited)) {
$properties = @{
PrimarySmtpAddress = $mailbox.PrimarySmtpAddress
TotalItemSize = $mailbox | Get-MailboxStatistics | Select-Object -ExpandProperty TotalItemSize
}
New-Object PSObject -Property $properties
} | where{$_.TotalItemSize -ge 1000MB} | Sort-Object TotalItemSize -Descending
Я получаю сообщение об ошибке в трубке до последнего оператора where. Точная ошибка: пустой элемент трубы не разрешен. @jbsmith – SMPLGRP
Я думаю, что вы на правильном пути, @jbsmith, но как ... это не работает. – SMPLGRP
Gah - Я написал код, не протестировав его. При тестировании у меня возникает проблема с неявным удалением (см. Этот вопрос: http://stackoverflow.com/questions/3156368/exchange-2010-totalitemsize-value-tobytes-always-empty). Вы можете обойти ошибку «пустой канал», добавив дополнительный набор {} брекетов, начиная с самого начала (перед «foreach») и заканчивая до '| где'. Возможно, вы также захотите изменить определение TotalItemSize на TotalItemSize.Value.ToMB(), а затем удалить «MB» из предложения where. См. Связанный вопрос для более подробной информации об этом. – jbsmith