在Office365中,我设置了一个名为“Corp Calendar”的日历的共享邮箱,该日历可供需要访问企业日历的任何用户共享。我拥有邮箱的完全权限,因此它在我的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秒完成发送/接收......我会增加这个长度。
答案 0 :(得分:0)
您的代码假定邮箱“Corporate Calendar”已作为委托商店添加到用户的个人资料中。首先,邮箱名称可能不同(例如'CorpCaledar@mycompany.com'),其次可能根本不存在。
为什么不使用Namespace.GetSharedDefaultFolder打开该邮箱的默认日历文件夹?