私はちょっとした混乱に巻き込まれました。
Powershell と Exchange Webservices API を使用して、Exchange 2010 メールボックスの内容全体を取得しようとしています。
フォルダとメール アイテムが実際にあるところまでは順調です。
個々のメール アイテムの完全なフォルダー パスを追加できるようにする必要があります。これにより、全体を xml または csv にエクスポートするときに、メールをフォルダーのパスでグループ化できます。
フォルダとメールを問題なく取得できます。
特定のフォルダーからメールアイテムを取得する方法は次のとおりです。
$ExchangeFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($ExchangeService, [Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::$FolderName)
[array] $ExchangeItems = $ExchangeFolder.FindItems($ItemLimit)
$PropertySet = New-Object
Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
$PropertySet.RequestedBodyType = [Microsoft.Exchange.WebServices.Data.BodyType]::$BodyType
foreach ($ExchangeItem in $ExchangeItems)
{
$ExchangeItem.Load($PropertySet)
Write-Output $ExchangeItem
}
そして、フォルダーを取得する方法:
$RootFolderId = New-Object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox,$MailboxName)
$RootFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($ExchangeService,$RootFolderId)
$FolderView = New-Object Microsoft.Exchange.WebServices.Data.FolderView(10000);
$FolderView.Traversal = [Microsoft.Exchange.WebServices.Data.FolderTraversal]::Deep
$FolderView.PropertySet = $Propset
$FolderResponse = $RootFolder.FindFolders($FolderView);
メールは を介してフォルダにマッピングされ、フォルダParentFolderId
には独自のId
とがありますParentFolderId
。
この情報から、どういうわけかランダムなフォルダーをつかむことができ、それを介してParentFolderId
それがフルパスであることを知ることができるということです。再帰関数を作成することと関係があると思いますが、頭を包むことができないようです。
今のところの私の計画は次のとおりだと思います。
Deep
私が使用するフォルダートラバーサルの代わりに、Shallow
現在バインドされているフォルダーの子であるフォルダーのみを提供します。- フォルダーを反復処理し、フォルダーの
Id
as キーとDisplayName
as 値で構成されるハッシュ マップを作成します。フォルダー オブジェクトに新しいプロパティを追加します。のようなもの\\<foldername>
。 - 子を持つフォルダーのフォルダーは、一度に 1 レベルずつ取得されます。ハッシュ マップでそれらを検索し
ParentFolderId
、取得した値を使用して更新し、独自の値を追加してDisplayName
、絶対位置を取得します。たとえば、親からそれを追加し、(1) のようにオブジェクトに追加するパスを結果として生成する可能性がある\\Inbox
独自のものを追加します。DisplayName
Economy
\\Inbox\Economy
- すべてのフォルダが処理され、マップされるまで、このプロセスを繰り返します。メールから、
ParentFolderId
絶対位置がわかるはずです。おもう...
上記が完全に混乱している場合は申し訳ありません。私は再帰関数や EWS について十分に理解していません。
詳細を明確にする必要がある場合は、お尋ねください。
前もってありがとうクリスチャン