powershell - 单个 session 中多个邮箱的Powershell EWS SubscribetoPullNotifications

标签 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

我还没有弄清楚如何使用here在Exchange Online上处理EWS的限制问题。我怀疑上述订阅默认情况下会在一小时后超时。

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

最佳答案

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

据我了解,由于模拟更多的是与其他用户进行通话,因此无法从不同的邮箱指定文件夹ID。如果该其他用户不具有对请求中提到的文件夹ID的委派特权,则它肯定会失败。可能是您应该先尝试使用控制台应用程序而不是Powershell来快速了解真正的功能。那是为了避免任何PS特定的错误妨碍对实际问题的研究。

使用“流订阅”方法,您可以根据邮箱的服务器亲缘关系对邮箱进行分组,如MSDN上的here所述。在做出决定之前,您应该先看一下Pull与Streaming之间的权衡。

关于powershell - 单个 session 中多个邮箱的Powershell EWS SubscribetoPullNotifications,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17222308/

相关文章:

c++ - gSoap EWS "Error 500: Internal Server Error"

soap - 使用 postman 测试 Microsoft EWS(Exchange Web 服务)

office365 - 使用 Microsoft Graph API 创建 Webhook 时遇到问题

windows - PowerShell boolean 表达式

powershell - 为什么我需要先把变量放到一个变量上

php - 使用 PHP-EWS 访问另一个邮箱日历事件

delphi - 将 INDY 10 SMTP 与 Office365 结合使用

office365 - 用Office-js替换一张图片

powershell - 在 powershell 中捕获 ffmpeg 的元数据输出

windows - Robocopy:复制文件保留文件夹结构但添加子文件夹