2013-10-02 1 views
0

Почему этот фрагмент кода не отображает PrimarySmtpAddress?Select-Object PrimarySmtpAddress

Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | where{$_.TotalItemSize -ge 1000MB} | Sort-Object TotalItemSize -Descending | Select-Object PrimarySmtpAddress,TotalItemSize | Export-CSV mailboxsize.csv 

ответ

1

Потому что вы передали результаты 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 
+0

Я получаю сообщение об ошибке в трубке до последнего оператора where. Точная ошибка: пустой элемент трубы не разрешен. @jbsmith – SMPLGRP

+0

Я думаю, что вы на правильном пути, @jbsmith, но как ... это не работает. – SMPLGRP

+0

Gah - Я написал код, не протестировав его. При тестировании у меня возникает проблема с неявным удалением (см. Этот вопрос: http://stackoverflow.com/questions/3156368/exchange-2010-totalitemsize-value-tobytes-always-empty). Вы можете обойти ошибку «пустой канал», добавив дополнительный набор {} брекетов, начиная с самого начала (перед «foreach») и заканчивая до '| где'. Возможно, вы также захотите изменить определение TotalItemSize на TotalItemSize.Value.ToMB(), а затем удалить «MB» из предложения where. См. Связанный вопрос для более подробной информации об этом. – jbsmith

Смежные вопросы