次の PowerShell コマンドを使用して、特定のパブリック フォルダー メールボックスに格納されているパブリック フォルダーを取得できます。
Get-PublicFolder –GetChildren | Where { $ _.ContentMailboxName –eq “PFMailbox1” }
(ただし、リモート PowerShell は使用したくありません)
EWS を使用してこれを行うことはできません。
私の最初のアイデアは、すべてのパブリック フォルダーを取得し、パブリック フォルダー メールボックスに従って並べ替えることでした。
ただし、パブリック フォルダーのメールボックス名を含む拡張 MAPI プロパティはおそらく存在しません (ContentMailboxName powershell プロパティに似ています)。
だから私はこれを試しました:デリゲートアクセスを使用したEWS
var mailbox = new Mailbox("PFMailbox1@MyDomain.local");
// PFMailbox1 is Public Folder mailbox with Pubclic folders
FolderId folderId = new FolderId(WellKnownFolderName.MsgFolderRoot, mailbox);
Folder rootfolder = Folder.Bind(service, folderId);
(WellKnownFolderName プロパティは .Root および PublicFolderRoot でもテストされました)
しかし、私は常にエラーが発生します:
「要求に失敗しました。リモート サーバーがエラーを返しました: (503) サーバーを利用できません。」または「タイプ 'Microsoft.Exchange.WebServices.Data.ServiceResponseException' の未処理の例外が Microsoft.Exchange.WebServices.dll で発生しました」
真似してみたところ
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, impUser);
// impUser=PFMailbox1@MyDomain.local
Folder rootfolder = Folder.Bind(service, WellKnownFolderName.MsgFolderRoot );
エラーが発生します:
「このアカウントには、要求されたユーザーを偽装する権限がありません。」
ユーザー Administrator と PFMailbox1 のすべてのメールボックス アクセス許可は、フル アクセスに設定されています。最新の Exchange2013 dll を使用しています。
EDIT1:
2 番目の問題は、ルート パブリック フォルダーを作成し、目的のパブリック フォルダー メールボックスに保存する方法です。
EWS メソッド Folder.Save(FolderId) にはパラメーターが 1 つしかなく、FolderId = PublicFolderRoot を使用すると、すべてのフォルダーが MasterHierarchy パブリック フォルダー メールボックス (最初に作成されたメールボックス) に保存されます。
私が知っている唯一の解決策は、すべてのパブリック フォルダー メールボックスに対してリモート パワー シェルを使用して第 1 レベル (ルート) フォルダーを作成することです。
New-PublicFolder "Folder1" -Mailbox "PFMailbox1"
New-PublicFolder "Folder2" -Mailbox "PFMailbox2"
次に、2 番目 (3 番目、..) のフォルダー レベルで、Folder.Save(FolderID) を使用できます。しかし、EWS を使用してそれを行う方法は?