在 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 秒的时间来完成发送/接收……我会增加这个长度。