运行PowerShell Get-MessageTrace脚本导出CSV时出现Guid参数转换错误
错误诱发原因
报错本质是PowerShell命令语法错误导致参数绑定错位,具体问题点如下:
- 多个cmdlet之间未使用管道符
|做流式传参,PowerShell会将后续所有裸写的命令、文件路径全部识别为Get-MessageTrace的输入位置参数。Get-MessageTrace的位置参数中MessageTraceId为Guid类型,会优先匹配到你写的CSV导出路径值,尝试将路径字符串转换为Guid时自然触发格式不匹配错误。 - 导出路径写法不规范,
C:"All email.CSV"属于无效路径格式,带空格的完整路径需要整体用引号包裹。 Get-MessageTraceDetail无合法输入源,该cmdlet必须绑定单条邮件追踪记录的MessageTraceId才能返回对应明细,不能直接裸写在命令序列中。
可行修复方案
根据实际导出需求选择对应命令即可:
仅导出邮件追踪摘要(不含单封邮件的投递/路由明细)
直接通过管道将查询结果传递给导出cmdlet,修正路径格式:
Get-MessageTrace -StartDate (Get-Date).Adddays(-9) -EndDate (Get-Date) -SenderAddress amir@worldheritageexhibitions.com -PageSize 5000 | Export-CSV -Path "C:\All email.CSV" -NoTypeInformation -Encoding UTF8
导出每封邮件的完整追踪详情
需要遍历查询到的所有邮件条目,逐条拉取明细后统一导出:
Get-MessageTrace -StartDate (Get-Date).Adddays(-9) -EndDate (Get-Date) -SenderAddress amir@worldheritageexhibitions.com -PageSize 5000 | ForEach-Object { $_ | Get-MessageTraceDetail } | Export-CSV -Path "C:\All email.CSV" -NoTypeInformation -Encoding UTF8
注意:Exchange Online的
Get-MessageTrace单次查询最多返回5000条、时间跨度最大为10天的记录,如果查询范围内符合条件的邮件总量超过5000条,需要增加分页逻辑拉取全量数据,避免导出结果遗漏。
内容的提问来源于stack exchange,提问作者Ankur Srivastava
相关产品推荐
相关产品推荐

