我已经陷入了一阵骚扰。
我正在尝试通过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
作为键,其DisplayName
作为值。将新属性添加到文件夹对象。像\\<foldername>
。ParentFolderId
并将使用获取的值进行更新并将其附加到他们的拥有DisplayName
来获取他们的绝对位置 - 例如来自父级的\\Inbox
并将其附加到他们自己的DisplayName
,这可能是Economy
导致\\Inbox\Economy
路径,我就像在(1)中将添加到对象。ParentFolderId
,我现在应该能够告诉他们的绝对位置。我想...... 对不起,如果以上是一个完整的混乱,我还没有完全掌握递归函数和EWS。
我们非常感谢您的帮助,如果您需要我澄清任何细节,请询问。
提前致谢 基督教
答案 0 :(得分:0)
我遇到了这个问题,并使用了一个递归函数来找出电子邮件项目的完整路径。 (这也是我的新手。这可能不是最好的方法,但它确实有效)
$view = New-Object Microsoft.Exchange.WebServices.Data.FolderView(999)
$view.PropertySet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.Webservices.Data.BasePropertySet]::FirstClassProperties)
$view.PropertySet.Add([Microsoft.Exchange.Webservices.Data.FolderSchema]::DisplayName)
$view.Traversal = [Microsoft.Exchange.Webservices.Data.FolderTraversal]::Deep
$findFolderResults = $service.FindFolders([Microsoft.Exchange.Webservices.Data.WellKnownFolderName]::MsgFolderRoot, $view)
function jjRecursion{
param (
[Parameter(Mandatory=$true, Position=0)]
$results,
[Parameter(Mandatory=$true, Position=1)]
$Id
)
$fullPath = @()
$results | % {
if ($_.id.UniqueId -eq $Id) {
$fullPath += $($_.displayname)
jjRecursion $results $_.ParentFolderId.UniqueId
}
else {}
}
RETURN $fullPath
}
$findPath = jjRecursion $findFolderResults $Item.ParentFolderId.UniqueId