0

在 Office365 中,我设置了一个共享邮箱,其中包含一个名为“公司日历”的日历,该日历共享给任何需要访问公司日历的用户。我拥有邮箱的完全权限,所以它在 Outlook 中与我的邮箱一起打开。

我创建了一个 PowerShell 脚本,用于检查日历中是否有新的或更改的条目,然后向我发送一封包含详细信息的电子邮件。有时,它会因为找不到指定的文件夹而失败。

这三行执行良好:

Add-Type -assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -comobject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")

这是间歇性失败的线路:

$current = $namespace.Folders.Item('Corporate Calendar').Folders.Item('Calendar').Folders.Item('Corp Calendar').Items

您可以看到它正在挖掘的结构:公司日历邮箱 > 日历 > 公司日历

这是 PowerShell 返回的错误:

Exception calling "Item" with "1" argument(s): "The attempted operation failed. An object could not be found." At C:\Users\aaldrich\desktop\Scripts\Calendar.ps1:72 char:1 
+ $current = $namespace.Folders.Item('Corporate Calendar').Folders.Item('Calendar' ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ 
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ComMethodTargetInvocation 

有一次,当它这样做时,我挖掘了命名空间,它似乎能够看到除公司日历邮箱之外的每个邮箱。重新启动 Outlook 可解决此问题。下次遇到这种情况,我会再进去检查。

在检查新项目()之前,我还实现了发送/接收$namespace.SendAndReceive(1),但添加并没有改变错误的频率。当日历由其他人编辑时,错误似乎最发生,但这不是很一致。

现在脚本只向我发送电子邮件,并且还会向我发送一封包含任何错误的电子邮件。不过,最终,我希望它自动向所有人发送电子邮件。

不重要的旁注:你们中的一些人可能想知道“为什么不将公用文件夹与文件夹助手一起使用?” 原封不动地转发对我们的 Exchange 组织不起作用(MS 已经研究了几个月......)。作为附件转发以无法从手机查看的方式转发。标准转发对日历事件毫无用处。

谢谢!

编辑: 我只是让它再次失败。不幸的是,我能够再次运行失败的线路并且它工作得很好。那不是以前发生的事情。如果在我检查项目时正在进行发送/接收,会不会有这些问题?我已经给了它 15 秒的时间来完成发送/接收……我会增加这个长度。

4

1 回答 1

0

您的代码假定邮箱“公司日历”已作为委托存储添加到用户的配置文件中。首先,邮箱名称可能不同(例如'CorpCaledar@mycompany.com'),其次它可能根本不存在。

为什么不使用 Namespace.GetSharedDefaultFolder 从该邮箱打开默认日历文件夹?

于 2013-08-12T17:41:02.277 回答