Powershell EWS SubscribetoPullNotifications用于单个会话中的多个邮箱

时间:2013-06-20 19:34:25

标签: powershell exchangewebservices office365 ews-managed-api

此PowerShell脚本的目标是监视Exchange Online(Office 365)中所有邮箱的特定文件夹,如果创建了某个项目,它会将该项目作为电子邮件发送到另一个smtp地址。我只使用一个邮箱就可以实现这一点,而且没有使用模拟的任何错误。

但是,我正在尝试为每个邮箱创建一个folderid数组列表,如:

foreach ($usermailbox in $mboxlist) {
 $farray += Get-TargetF($usermailbox)
 }

$ farray包含以下类型的对象:

Microsoft.Exchange.WebServices.Data.FolderId($tfTargetFolder.Id)

然后我在以下地方寻找事件:

$service.SubscribeToPullNotifications($farray,60,$null,[Microsoft.Exchange.WebServices.Data.EventType]::Created)

请注意,Get-TargetF函数通过每个邮箱的自动发现获取服务器名称。 它还使用$service.FindFolders来查找正确的文件夹。

像我上面显示的那样运行脚本会导致少数邮箱出错但不是全部(我已经过滤掉了5个邮箱进行测试)。

New-Object : Constructor not found. Cannot find an appropriate constructor for type Microsoft.Exchange.WebServices.Data.FolderId.
At C:\Documents\mysc.ps1:63 char:22
+ $InboxId = new-object <<<<  Microsoft.Exchange.WebServices.Data.FolderId($tfTargetFolder.Id)
    + CategoryInfo          : ObjectNotFound: (:) [New-Object], PSArgumentException
    + FullyQualifiedErrorId : CannotFindAppropriateCtor,Microsoft.PowerShell.Commands.NewObjectCommand

当我开始收听事件时,我收到了这个错误:

Cannot find an overload for "SubscribeToPullNotifications" and the argument count: "4".
At C:\Documents\mysc.ps1:79 char:59
+  $pullSubscription = $service.SubscribeToPullNotifications <<<< ($farray,60,$null,[Microsoft.Exchange.WebServices.Data.EventType]::Created)
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest

我还没想出如何在Exchange Online上提到here处理EWS的限制问题。我怀疑上面的订阅默认会在一小时后超时。

在单一的pssession中实现这一目标的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我认为您在这里唯一的选择是为每个邮箱创建单独的订阅,然后逐个循环调用它们以调用GetEvents以查看是否有任何新的Create事件。

根据我的理解,从不同的邮箱中指定文件夹ID无法正常工作,因为模拟更多的是与其他用户进行通话。如果该其他用户对请求中提到的文件夹ID没有委派权限,则绑定失败。也许你应该先使用Console应用程序而不是Powershell来快速查看真正有用的内容。这是为了避免任何PS特定的错误阻碍对实际问题的调查。

使用流式订阅方法,您可以根据MSDN上描述的here的服务器关联性对邮箱进行分组。在做出决定之前,你应该看看Pull与Streaming之间的权衡。