PowerShell获取Outlook已发送会议响应组织者失败问题求助
问题:Outlook会议响应邮件的收件人/组织者字段获取异常
场景与初始代码
当受邀参加会议并选择接受、暂定或拒绝后,对应的响应邮件会出现在已发送邮件文件夹(对应常量olFolderSentMail = 5)中。我尝试用以下PowerShell代码获取指定日期范围内的该文件夹邮件列表:
$olFolderSentMail = 5 $ol = New-Object -ComObject Outlook.Application $ns = $ol.GetNamespace('MAPI') $Start = $targetDate.ToShortDateString() + " 00:00" $End = $targetDate.AddDays(+1).ToShortDateString() + " 00:00" $sentMail = $ns.GetDefaultFolder($olFolderSentMail) $sentMail.Items | Where-Object { $_.ReceivedTime -ge "$Start" -and $_.ReceivedTime -lt "$End" } | ForEach-Object { $organizer = $_.MeetingOrganizer "{0,-20} {1,-20} {2,-20} {3:yyyy-MM-dd HH:mm:ss} {4}" -f $_.To, $organizer, $_.CC, $_.ReceivedTime, $_.Subject } | Out-String -Width 1024
输出示例(To和MeetingOrganizer字段为空):
<spaces>2024-04-05 06:59:00 Tentative: meeting subject
问题:输出中的To和MeetingOrganizer字段均为空,但在Outlook已发送邮件文件夹中能正常看到组织者名称。使用版本为Microsoft® Outlook® for Microsoft 365 MSO (Version 2403 Build 16.0.17425.20124) 64位。
尝试的修改方案
感谢Dmitry Streblechenko的解答,我按照建议修改了代码,改用Restrict方法过滤,并尝试通过关联约会获取组织者信息:
... $Filter = "[ReceivedTime] >= '$Start' AND [ReceivedTime] < '$End'" $sentMail.Items.Restrict($Filter) | ForEach-Object { $to = $_.To $appt = $_.getAssociatedAppointment($true) if ($appt -ne $null) { $to = $appt.Organizer } "{0,-20} {1,-20} {2:yyyy-MM-dd HH:mm:ss} {3}" -f $to, $_.CC, $_.ReceivedTime, $_.Subject } | Out-String -Width 1024
新的异常问题
编辑补充:修改后的代码对拒绝会议的响应无效——To、Organizer和收件人字段均为空(尽管Outlook已发送项中显示了收件人)。更奇怪的是,我对同一个会议依次执行接受、暂定、拒绝操作后,原本能正常显示的前两个响应的组织者信息,在执行拒绝操作后全部丢失了。
内容的提问来源于stack exchange,提问作者incandenza
相关产品推荐
相关产品推荐

