2

この PowerShell スクリプトの目標は、Exchange Online (Office 365) 内のすべてのメールボックスの特定のフォルダーを監視することです。アイテムが作成された場合、そのアイテムは電子メールとして別の SMTP アドレスに送信されます。偽装を使用して、エラーなしで 1 つのメールボックスだけでこれを実現できます。

ただし、次のような各メールボックスの 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 での EWS のスロットリングの問題に対処する方法もわかりませんでした。上記のサブスクリプションは、デフォルトで 1 時間後にタイムアウトになると思われます。

単一のpssessionでこれを達成する正しい方法は何ですか?

4

1 に答える 1