Office 365 Get-MailboxFolderStatistics导出CSV排序及字段问题
问题解答
问题1:CSV列顺序随机的解决方法
原因
你调用New-Object时传入的普通哈希表@{}是无序结构,PowerShell不会保留你定义属性时的输入顺序,因此每次生成对象的属性排列顺序随机,导出CSV的列顺序就会随之变动。
解决方法
有两种通用方案可选:
- 方案1:使用有序哈希表/
[PSCustomObject]声明对象,PowerShell 3.0及以上版本支持该写法,会原生保留你定义属性的顺序 - 方案2:导出CSV前通过
Select-Object显式指定列顺序,即使对象属性顺序混乱,也会按照你指定的顺序输出列
问题2:RecoverableItems列返回System.Object[]的解决方法
原因
当你用-FolderScope RecoverableItems参数调用Get-MailboxFolderStatistics时,返回的是可恢复项目目录下的多个子文件夹集合(包含删除项、版本、清除项、审核日志等多个独立子文件夹),因此$recoverableitem本身是数组对象,直接取ItemsInFolderAndSubfolders得到的是每个子文件夹对应数值组成的数组,不是单个汇总值,导出CSV时就会显示对象类型名而非数值。
解决方法
对返回的可恢复项目集合的对应属性做求和计算,得到总数值即可。
修正后完整脚本
$All = Get-Mailbox -ResultSize Unlimited $All | ForEach-Object { # 推荐用Identity/PrimarySmtpAddress作为查询参数,避免DisplayName重名导致匹配错误 $mailboxIdentity = $_.Identity $inboxstats = Get-MailboxFolderStatistics -Identity $mailboxIdentity -FolderScope Inbox $deleteditem = Get-MailboxFolderStatistics -Identity $mailboxIdentity -FolderScope DeletedItems $sentitem = Get-MailboxFolderStatistics -Identity $mailboxIdentity -FolderScope SentItems $recoverableitem = Get-MailboxFolderStatistics -Identity $mailboxIdentity -FolderScope RecoverableItems # 用[PSCustomObject]保留属性定义顺序 [PSCustomObject]@{ UserPrincipalName = $_.DisplayName InboxItems = $inboxstats.ItemsInFolderAndSubfolders DeletedItems = $deleteditem.ItemsInFolderAndSubfolders SentItems = $sentitem.ItemsInFolderAndSubfolders # 对可恢复项目数组的计数属性求和,输出数值类型结果 RecoverableItems = ($recoverableitem.ItemsInFolderAndSubfolders | Measure-Object -Sum).Sum InboxSize = $inboxstats.FolderandSubFolderSize } # 显式指定列顺序,双重保障导出结果符合预期 } | Select-Object UserPrincipalName,InboxItems,DeletedItems,SentItems,RecoverableItems,InboxSize | Export-CSV "C:\resultsv12.csv" -NoTypeInformation -Encoding UTF8
内容的提问来源于stack exchange,提问作者Bernietechy
相关产品推荐
相关产品推荐

