如何合并/追加两个Exchange PowerShell脚本的导出信息至同一CSV?
解决Exchange 2010中邮箱与邮箱统计信息合并导出CSV的问题
直接追加CSV内容会导致列不匹配,正确的做法是在PowerShell中先将邮箱信息与对应的统计信息合并为同一对象,再导出到CSV文件。以下是可行的脚本:
Get-Mailbox -ResultSize Unlimited | ForEach-Object { # 保存当前邮箱对象 $mailbox = $_ # 获取当前邮箱的统计信息 $mailboxStats = Get-MailboxStatistics -Identity $mailbox.Identity | Select-Object StorageLimitStatus, TotalItemSize # 合并邮箱属性与统计信息属性,输出新对象 $mailbox | Select-Object AddressBookPolicy, ProhibitSendQuota, SamAccountName, UserPrincipalName, WhenMailboxCreated, Alias, OrganizationalUnit, CustomAttribute1, DisplayName, PrimarySmtpAddress, RecipientType, RecipientTypeDetails, WindowsEmailAddress, WhenChanged, WhenCreated, @{Name='StorageLimitStatus'; Expression={$mailboxStats.StorageLimitStatus}}, @{Name='TotalItemSize'; Expression={$mailboxStats.TotalItemSize}} } | Export-Csv -NoTypeInformation .\Mailboxes_combined.csv -Delimiter ";" -Encoding Unicode
关键说明:
- 遍历每个邮箱对象,为每个邮箱单独获取对应的统计信息,确保邮箱标识一一对应,避免数据错位
- 通过计算属性(
@{Name=; Expression=})将统计信息的字段添加到原邮箱对象中,最终导出的CSV包含所有需要的列,且同一邮箱的所有信息在同一行 - 无需事后追加文件,一次性完成数据合并与导出
为什么AddContent无法解决问题:
AddContent仅负责将文本内容追加到文件末尾,不会解析CSV的列结构。第二个脚本导出的CSV表头和数据会被当成新行内容直接添加,导致列数不匹配,出现数据错位的情况。
内容的提问来源于stack exchange,提问作者Mike JCR iTech
相关产品推荐
相关产品推荐

