如何通过Outlook COM API将任务DueDate设置为None?
如何将Outlook任务的DueDate重置为None(PowerShell)
直接给Outlook任务项的DueDate属性赋值$null或[Nullable[DateTime]]$null无法真正清除日期,这是因为.NET与COM互操作会将null转换为OLE自动化的默认日期值(1899年12月30日)。要彻底将日期重置为“None”,需要通过PropertyAccessor对象操作对应的MAPI属性:
正确代码示例
Add-type -assembly "Microsoft.Office.Interop.Outlook" | Out-Null $outlook = New-Object -ComObject Outlook.Application $item = $outlook.Session.GetItemFromID("myvalidentryid") # 定义DueDate对应的MAPI属性标签 $dueDatePropTag = "http://schemas.microsoft.com/mapi/proptag/0x000D0040" # 清除该属性 $item.PropertyAccessor.DeleteProperty($dueDatePropTag) # 保存修改 $item.Save()
原理说明
Outlook的任务项日期属性底层对应MAPI属性,直接赋值$null无法触发COM对象的“清除”逻辑,反而会被转换为默认日期。通过PropertyAccessor.DeleteProperty()可以直接删除该MAPI属性,从而让Outlook显示“None”。
其他日期属性的处理
如果需要重置其他日期属性(比如StartDate),只需替换对应的MAPI属性标签:
StartDate对应的属性标签:http://schemas.microsoft.com/mapi/proptag/0x000E0040- 用同样的
DeleteProperty方法即可完成清除
内容的提问来源于stack exchange,提问作者Michael Aigner
相关产品推荐
相关产品推荐

