我可以结合这两个数组

时间:2018-07-02 19:36:01

标签: arrays powershell active-directory exchange-server export-to-csv

我已经编写了一些简单的Exchange Powershell。我想在单个CSV中列出UPN,显示名称,项目计数和项目大小。但是,我只能将数据成功推入两个数组,然后手动组合它们。这是我的代码。

$MailBoxs = Get-Mailbox * | Select UserPrincipalName -ExpandProperty UserPrincipalName | Sort-Object UserPrincipalName
$Mailboxs2 = $MailBoxs.Where({ $_ -ne $null })
ForEach($MailBox2 in $MailBoxs2) { Get-MailboxStatistics $Mailbox2 | Sort-Object TotalItemSize –Descending | Select @{label=”User”;expression={$_.DisplayName}},@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}},@{label=”Items”;expression={$_.ItemCount}} | Export-CSV "C:\T2\MailBoxSize.csv" -Append -NoTypeInformation }
ForEach($MailBox2 in $MailBoxs2) { $Mailbox2 | Export-CSV "C:\T2\MailBoxSize2.csv" -Append -NoTypeInformation }

由于某种原因,第二个CSV基本上给了我两个字段SMTP地址和一些随机的Length字段,它也给了我一个领先的空格。如果有人对如何清理有任何想法,我希望听到他们的声音。感谢您的宝贵时间。

1 个答案:

答案 0 :(得分:4)

多个选择语句是不必要的。这是一种简化的方式:

$mailboxes = @(Get-Mailbox *).
    Where({$_.UserPrincipalName}) |
    Sort-Object -Property UserPrincipalName

foreach ($box in $mailboxes) {
    Get-MailboxStatistics $box.UserPrincipalName |
        Sort-Object -Property TotalItemSize -Descending |
        Select-Object -Property @(
            @{L='UPN';E={$box.UserPrincipalName}}
            @{L='User';E={$_.DisplayName}}
            @{L='Total Size (MB)';E={$_.TotalItemSize.Value.ToMB()}}
            @{L='Items';E={$_.ItemCount}}
        ) |
        Export-Csv -Path 'C:\T2\MailBoxSize.csv' -NoTypeInformation -Append
}