Powershell:想要 Exchange 统计数据并遇到(输出)限制

Powershell:想要 Exchange 统计数据并遇到(输出)限制

我正在尝试收集我们组织中所有邮箱的邮箱统计信息,并将其导出到 Excel /CSV 文件。这是我迄今为止想出/收集的代码:

Get-Mailbox -ResultSize Unlimited |Get-MailboxStatistics | where {$_.ObjectClass -eq “Mailbox”} | Sort-Object TotalItemSize -Descending |FT @{label=”User”;expression={$_.DisplayName}},ServerName,Database,@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}} |Out-File -Append -FilePath C:\Users\Public\Documents\MailboxSize.log

  1. 使用 Export-Csv 时,写入的文件不包含请求的信息/输出。它只显示“乱码”
  2. 运行上述脚本时,我遇到了“允许的最大值是 524288000”的 Powershell 消息,并且只记录了请求数据的一小部分

你能帮我解决一下这两个评论吗?

= = = = = =

这是我目前正在使用的。它为我提供了所需的详细信息和输出。虽然我希望进一步优化这部分,但从更大的角度来看,我很高兴它是一个单行命令:

Get-Recipient -ResultSize Unlimited |Where {$_.RecipientType –eq “UserMailbox”} |Get-MailboxStatistics | Sort-Object TotalItemSize –Descending |Select-Object @{label=”User”;expression={$_.DisplayName}},@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}},@{label=”Items”;expression={$_.ItemCount}},@{label=”Storage Limit”;expression={$_.StorageLimitStatus}} |Export-CSV -NoTypeInformation -Path c:\users\public\documents\$Filename

我确实必须调整 PSSessionConfiguration: Set-PSSessionConfiguration -name microsoft.powershell -MaximumReceivedObjectSizeMB 800 -Force

答案1

您不能在管道中使用Export-CSVafter Format-Table。如果要使用Export-CSV,请将 Format-Table 更改为Select-Object

Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | where {$_.ObjectClass -eq “Mailbox”} | Sort-Object TotalItemSize -Descending | Select-Object @{label=”User”;expression={$_.DisplayName}},ServerName,Database,@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}} | Export-CSV "C:\Users\Public\Documents\MailboxSize.log" -notypeinformation

就目前情况而言,你不会得到全部组织中的邮箱。您的查询正在过滤掉发现邮箱、房间邮箱、设备邮箱等。您可能已经意识到了这一点,但我只是想澄清一下。如果您想提高查询的性能,您可能希望通过修改 cmdlet 来过滤管道开头的那些无关Get-Mailbox邮箱收件人类型详细信息

Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize Unlimited

至于 524288000 的限制,您有几个选择。您可以在 web.config 中修改 maxAllowedContentLength 属性的限制,但我不建议这样做,因为我们真的不知道您需要执行此脚本的上限是多少。此外,随着您添加更多邮箱,这种情况可能会在未来发生变化,并且您的脚本将再次中断。将限制设置得太高也可能导致一些问题。

另一个选择是分块处理数据。由于您最终要导出到 CSV,并且没有原生-附加中的参数Export-CSV,您必须使用变通方法。Dmitry Sotnikov 创建了一个包装器对于Export-CSV实现此功能并允许您逐行导出到 CSV 的 cmdlet。

更新:PowerShell 3.0Export-CSV有一个附加参数。

您的命令将被修改为以下内容——

$sortedStats = Get-Recipient -ResultSize Unlimited -RecipientTypeDetails UserMailbox | Get-MailboxStatistics | Sort-Object TotalItemSize -Descending

foreach ($s in $sortedStats) {
    $s | Select-Object @{label=”User”;expression={$_.DisplayName}},ServerName,Database,@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}} | Export-CSV "C:\Users\Public\Documents\MailboxSize.csv" -notypeinformation -Append
}

这一切我都还没有完全测试过,但我想象它就是这样工作的。性能会受到影响。如果你最终选择了这条路线,我很想知道你的结果。

相关内容