この 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でこれを達成する正しい方法は何ですか?