2

Моя цель для этого сценария powershell - отслеживать конкретную папку для всех почтовых ящиков в Exchange Online (Office 365), и если элемент создан, он отправит этот элемент как отправьте электронное письмо на другой адрес smtp. Я могу добиться этого только для одного почтового ящика без каких-либо ошибок с использованием олицетворения.Powershell EWS SubscribetoPullNotifications для нескольких почтовых ящиков за один сеанс

Однако, я пытаюсь создать список 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 

Я тоже не понял, как справиться с проблемами дросселирования с EWS на Exchange Online упоминается here. Я подозреваю, что подписка выше будет таймаутом через час по умолчанию.

Каков правильный способ достижения этого в одном pssession?

+0

Считаете ли вы использование правил почтового ящика? –

+0

Элементы, созданные в папке, которую я ищу, не являются электронными письмами. Эти элементы (IM) генерируются Lync IM. Папка называется «Диалог Histroy». – fmysky

+0

Мне интересно, если вы решили это, и если да, вы разместили блог об этом решении. Это выглядит очень интересно. –

ответ

0

Я думаю, что единственный вариант, который у вас здесь есть, - создать отдельную подписку для каждого почтового ящика, а затем пропустить их один за другим, чтобы вызвать GetEvents, чтобы узнать, есть ли какие-либо новые события Create.

В соответствии с моим пониманием, указание идентификаторов папки из разных почтовых ящиков не может работать, поскольку олицетворение - это больше о том, чтобы сделать вызов каким-то другим пользователем. Если у этого другого пользователя нет прав делегирования идентификаторам папок, упомянутых в запросе, он будет терпеть неудачу. Может быть, вы должны сначала попробовать с консольным приложением, а не с Powershell, чтобы быстро увидеть, что действительно работает. Это делается для того, чтобы избежать каких-либо специфических ошибок PS, препятствующих исследованию актуальной проблемы.

С помощью подхода Streaming Subscription вы можете группировать почтовые ящики на основе их близости к сети, как описано here на MSDN. Вы должны посмотреть на компромиссы между Pull vs. Streaming, прежде чем принимать решение в этом.