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消息,并且只logging(less部分)所请求的数据

你能帮我解决一下两个意见吗?

= = = = = =

这是我目前使用的。 它提供了我所要求的细节和输出。 虽然我正在寻求进一步优化这个部分,但在一个更大的scheme中,我很高兴它是一个单一的命令:

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

在pipe道中的Format-Table之后不能使用Export-CSV 。 如果要使用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 

就目前而言,您没有获得组织中的所有邮箱。 您的查询过滤出发现邮箱,房间邮箱,设备邮箱等。您可能已经意识到这一事实,但我只是想说清楚。 如果您希望提高查询的性能,则可能需要通过修改Get-Mailbox cmdlet以在RecipientTypeDetails上筛选出在pipe道开头处的那些无关框。

 Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize Unlimited 

至于524288000的限制,你有几个select。 您可以修改max.AllowedContentLength属性的web.config中的限制,但是我不会build议这样做,因为我们实际上不知道您需要closures此脚本的上限。 而且,随着您添加更多邮箱,将来可能会发生变化,您的脚本将再次中断。 设置太高的限制也会导致一些问题。

您的其他选项是处理数据块。 由于您最终导出为CSV 格式,并且Export-CSV没有本机-Append参数,因此您必须使用解决方法。 Dmitry Sotnikov为Export-CSV cmdlet创build了一个包装器 ,该包装器实现了该function,并允许您逐行导出到CSV。

更新:在PowerShell 3.0中 , Export-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 } 

这完全没有经过我的testing,但这就是我想象的工作原理。 将有一个性能打击。 如果你最终走上这条路,我会很有兴趣知道你的结果。