【问题标题】:Powershell EWS SubscribetoPullNotifications for multiple mailboxes in a single session单个会话中多个邮箱的 Powershell EWS SubscribetoPullNotifications
【发布时间】:2013-06-17 19:42:59
【问题描述】:

我对这个 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

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

在单个 pssession 中实现此目的的正确方法是什么?

【问题讨论】:

  • 您考虑过使用邮箱规则吗?
  • 在我要查找的文件夹中创建的项目不是电子邮件。这些项目 (IM) 由 Lync IM 生成。该文件夹名为“Conversation Histroy”。
  • 我很好奇您是否解决了这个问题,如果解决了,您是否发布了有关该解决方案的博客。看起来很有趣。

标签: powershell exchangewebservices office365 ews-managed-api


【解决方案1】:

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

根据我的理解,指定来自不同邮箱的文件夹 ID 不起作用,因为模拟更多是关于以其他用户的身份拨打电话。如果该其他用户没有对请求中提到的文件夹 ID 的委托权限,则它必然会失败。也许您应该先尝试使用 Console 应用程序而不是 Powershell,以快速了解真正有效的方法。这是为了避免任何 PS 特定的错误妨碍实际问题的调查。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    相关资源
    最近更新 更多