带有EWSid的EWS powershell文件夹绑定:检索文件夹时,转换后的folderid与EWSid不匹配

问题描述 投票:0回答:1

我正在尝试在非知名文件夹之间移动项目,以合并Exchange Online存档邮箱中的两个层次结构分支。我已经获得邮箱FolderStatistics,将FolderID(OWAid)转换为EWSid,并且我试图将其与绑定到ArchiveMsgFolderRoot时检索到的EWSids列表进行比较,并获取所有文件夹的列表。我发现转换后的FolderID与绑定检索到的不同。我试图获取文件夹统计信息,转换FolderID,并使用转换后的FolderID绑定到文件夹,但是找不到文件夹。此时,我将尝试以其他方式执行此操作(Glen的FolderIdFromPath函数),但我不明白为什么转换后的EWSid和检索到的EWSid不同。

这是我转换FolderID的方式,以及我如何检索文件夹的方式。 $ FolderStats和$ MailboxFolderList中的相同文件夹没有相同的ID。

# Function to convert the OWAid to EWSid
function ConvertId{      
    param (  
            $OwaId = "$( throw 'OWAId is a mandatory Parameter' )"  
          )  
    process{  
        $aiItem = New-Object Microsoft.Exchange.WebServices.Data.AlternateId        
        $aiItem.Mailbox = $Mailbox        
        $aiItem.UniqueId = $OwaId     
        $aiItem.Format = [Microsoft.Exchange.WebServices.Data.IdFormat]::OwaId        
        $convertedId = $service.ConvertId($aiItem, [Microsoft.Exchange.WebServices.Data.IdFormat]::EwsId)   
        return $convertedId.UniqueId  
    }  
} # function ConvertId END

# Mailbox to act against
$Mailbox = "[email protected]" 

# Import Web Services Module
Import-Module -Name "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"

#  Load the System.Web assembly
Add-Type -AssemblyName System.Web

# EWS service setup: Create the service object to access the Archive mailbox
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService -ArgumentList Exchange2013_SP1
$service.Credentials = new-object Microsoft.Exchange.WebServices.Data.WebCredentials -ArgumentList $Credential.UserName, $Credential.GetNetworkCredential().Password
$service.Url= new-object Uri("https://outlook.office365.com/EWS/Exchange.asmx")
$service.TraceEnabled = $True
$service.ImpersonatedUserId = new-object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress,$Mailbox)

# Import the latest Archive mailbox folderstats
$FolderStats = Import-Csv "C:\MBstats_4-1-2019.csv" | select *, EWSid

# Convert the OWAid(mailboxFolderStatistics) to EWSid
foreach($FolderStat in $FolderStats)
{    
    $UrlEncodedId = [System.Web.HttpUtility]::UrlEncode($FolderStat.FolderId.ToString()) 
    $FolderStat.EWSid = new-object Microsoft.Exchange.WebServices.Data.FolderId((Convertid $UrlEncodedId))    
}

# Bind to the Archive mailbox root
$ArchiveMailboxRoot = New-Object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.Webservices.Data.WellKnownFolderName]::ArchiveMsgFolderRoot,$Mailbox) 
$BindArchiveMailboxRoot = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$ArchiveMailboxRoot) 

# Create search criteria
$FolderView = New-Object Microsoft.Exchange.WebServices.Data.FolderView(10000) 
$FolderView.Traversal = [Microsoft.Exchange.WebServices.Data.FolderTraversal]::Deep 

# Get all Archive mailbox folders
$MailboxFolderList = $BindArchiveMailboxRoot.FindFolders($FolderView)
powershell exchangewebservices move items
1个回答
0
投票

当从存档文件夹转换ID时,您需要在AlternateId对象上将IsArchive属性设置为True,例如,可以这样做

    # Function to convert the OWAid to EWSid
function ConvertArchiveId{      
    param (  
            $OwaId = "$( throw 'OWAId is a mandatory Parameter' )"  
        )  
    process{  
        $aiItem = New-Object Microsoft.Exchange.WebServices.Data.AlternateId        
        $aiItem.Mailbox = $Mailbox        
        $aiItem.UniqueId = $OwaId     
        $aiItem.Format = [Microsoft.Exchange.WebServices.Data.IdFormat]::OwaId  
        $aiItem.isArchive = $true      
        $convertedId = $service.ConvertId($aiItem, [Microsoft.Exchange.WebServices.Data.IdFormat]::EwsId)   
        return $convertedId.UniqueId  
    }  
} # function ConvertId END
© www.soinside.com 2019 - 2024. All rights reserved.