带有Get-Mailbox和Get-MailboxStatistics的Powershell脚本缺少输出

时间:2018-06-25 20:55:47

标签: powershell

我正在使用Powershell脚本来确定Office 365租户中用户邮箱的大小。 这几乎可以正常工作,但是仅对于第一个返回的项目,不会显示用户的电子邮件地址。 在此情况下,应为: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

2 个答案:

答案 0 :(得分:0)

您可以使用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两次。

答案 1 :(得分:-1)

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

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