我让自己有点晕头转向。
我正在尝试通过 Powershell 和 Exchange Webservices API 获取 Exchange 2010 邮箱的全部内容。
到了我实际拥有文件夹和邮件项目的地步,一切都会好起来的。
我需要能够添加每个单独邮件项目的完整文件夹路径,以便当我将整个内容导出到 xml og 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>
。 - 那些有孩子的文件夹将被一次提取一层,我将
ParentFolderId
在哈希图中查找它们,并将使用提取的值更新并附加它们自己的值DisplayName
以获得它们的绝对位置 - 例如\\Inbox
从父级并将其附加到他们自己的DisplayName
,这可能是Economy
导致\\Inbox\Economy
路径的东西,就像在(1)中一样,我将添加到对象中。 - 重复此过程,直到所有文件夹都已处理和映射。从
ParentFolderId
邮件中,我现在应该能够知道他们的绝对位置。我认为...
抱歉,如果以上内容一团糟,我对递归函数和 EWS 的速度都不太了解。
任何帮助将不胜感激,如果您需要我澄清任何细节,请询问。
在此先感谢基督教