【问题标题】:Select-Object PrimarySmtpAddress选择对象 PrimarySmtpAddress
【发布时间】:2013-10-09 05:52:46
【问题描述】:

为什么这段代码没有显示 PrimarySmtpAddress?

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

【问题讨论】:

    标签: powershell csv exchange-server


    【解决方案1】:

    因为您将 Get-Mailbox 的结果通过管道传输到 Get-MailboxStatistics。

    Get-Mailbox 返回包含 PrimarySmtpAddress 属性的 Microsoft.Exchange.Data.Directory.Management.Mailbox 对象。但是,一旦将这些对象通过管道传输到另一个 cmdlet(在本例中为 Get-MailboxStatistics),管道的其余部分将包含该 cmdlet 的结果。因此,在 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
    • 我认为你在正确的轨道上,@jbsmith,但是这不起作用。
    • Gah - 我没有测试就写了代码。在测试中,我遇到了隐式远程处理的问题(请参阅此问题:stackoverflow.com/questions/3156368/…)。您可以通过添加一组额外的 {} 大括号来绕过“空管道”​​错误,从最开始(在 'foreach' 之前)开始并在 ' | 之前结束。在哪里'。您可能还希望将 TotalItemSize 定义更改为 TotalItemSize.Value.ToMB(),然后从 where 子句中删除“MB”。有关详细信息,请参阅链接的问题。
    猜你喜欢
    • 2013-11-25
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多