【问题标题】:Powershell script with Get-Mailbox and Get-MailboxStatistics missing output带有 Get-Mailbox 和 Get-MailboxStatistics 的 Powershell 脚本缺少输出
【发布时间】:2019-01-15 09:08:51
【问题描述】:

我正在使用 powershell 脚本来确定我的 office 365 租户中用户邮箱的大小。 这几乎可以正常工作,但仅对于第一个返回的项目,不会显示用户的电子邮件地址。 在这个 CAE 中,它应该是:username1@contoso.com 但它保持空白

为什么?

Get-Mailbox -ResultSize Unlimited | Where {$_.EmailAddresses -like 
"*@contoso.com"} | Get-MailboxStatistics |
Select-Object -Property @{label=”User”;expression={$_.DisplayName}},
@{label="Emailaddress";e={(get-mailbox $_.legacyDN).PrimarySMTPAddress}},
@{label=”Total Messages”;expression= {$_.ItemCount}},
@{label=”Total Size (MB)”;expression={[math]::Round(`
($_.TotalItemSize.ToString().Split("(")[1].Split(" ")[0].Replace(",","")/1MB),2)}}

结果是以下输出。 缺少第一行的电子邮件地址。

User        Emailaddress             Total Messages Total Size (MB)
----        ------------             -------------- ---------------
Username 1                                    15977         2844,87
Username 2  username2@contoso.com               546            3,41

【问题讨论】:

  • 糟糕,我现在才注意到实际的问题是“为什么?”。对不起,我没有答案。起初我以为你在寻找解决方案。 ;-)
  • 请问您为什么在第 4 行使用(get-mailbox $_.legacyDN).PrimarySMTPAddress 而不是get-mailbox $_.PrimarySMTPAddress。我尝试使用您的代码,这部分让我很困惑。不过,我的建议效果很好。 Get-mailbox %mailbox_name% | fl * 没有 legacyDN 属性
  • @TeslaGreat 我可以回答这个问题。在此代码中,您必须为计算的属性处理 Get-MailboxStatistics 的属性。但这没有属性“PrimarySMTPAddress”。

标签: powershell


【解决方案1】:

您可以使用Foreach-Object 循环和自定义对象来实现您所需要的,如下所示:

 Get-Mailbox -Filter "EmailAddresses -like '*@contoso.com'" -ResultSize Unlimited | 
    ForEach-Object{
        $Statistics = Get-MailboxStatistics -Identity $_.sAMAccountName
        [PSCustomObject]@{
            User = $_.DisplayName
            Emailaddress = $_.PrimarySMTPAddress
            'Total Messages' = $Statistics.ItemCount
            'Total Size (MB)' = [math]::Round(($Statistics.TotalItemSize.ToString().Split("(")[1].Split(" ")[0].Replace(",","")/1MB),2)
        }
    }

它甚至可以更快一点,因为您不需要运行您的 Get-Mailbox cmdlet 两次。

【讨论】:

    【解决方案2】:

    要停止接收警告或错误,请使用以下步骤

    $WarningAction ='Ignore'
    $WarningAction = 'SilentlyContinue'
    $ErrorActionPreference = 'SilentlyContinue'
    

    【讨论】:

    • 这和问题有什么关系?
    猜你喜欢
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 2016-06-12
    • 2014-10-07
    • 2020-08-28
    • 2015-06-21
    • 2011-11-19
    • 1970-01-01
    相关资源
    最近更新 更多