我正在尝试为我们组织中的所有邮箱收集邮箱统计信息,并将其导出到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
你能帮我解决一下两个意见吗?
= = = = = =
这是我目前使用的。 它提供了我所要求的细节和输出。 虽然我正在寻求进一步优化这个部分,但在一个更大的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,但这就是我想象的工作原理。 将有一个性能打击。 如果你最终走上这条路,我会很有兴趣知道你的结果。