EWS powershell 文件夹与 EWSid 绑定:转换后的文件夹 ID 在检索文件夹时与 EWSid 不匹配
EWS powershell folder binding with EWSid : converted folderid doesn't match the EWSid when retrieving the folder
我正在尝试在非已知文件夹之间移动项目以合并 Exchange Online Archive 邮箱中的两个层次结构分支。我得到了 mailboxFolderStatistics,将 FolderID (OWAid) 转换为 EWSid,并且我试图将它与绑定到 ArchiveMsgFolderRoot 时检索到的 EWSid 列表进行比较,并获取所有文件夹的列表。我发现转换后的 FolderID 与绑定检索到的不同。我试图获取文件夹统计信息,转换 FolderID,并使用那些转换后的 FolderID 绑定到文件夹,但找不到文件夹。此时我将尝试以不同的方式执行此操作(Glen 的 FolderIdFromPath 函数),但我不明白为什么转换和检索的 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 = "UserA@domain.com"
# Import Web Services Module
Import-Module -Name "C:\Program Files\Microsoft\Exchange\Web Services.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)
当您从 Archive 文件夹转换 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
我正在尝试在非已知文件夹之间移动项目以合并 Exchange Online Archive 邮箱中的两个层次结构分支。我得到了 mailboxFolderStatistics,将 FolderID (OWAid) 转换为 EWSid,并且我试图将它与绑定到 ArchiveMsgFolderRoot 时检索到的 EWSid 列表进行比较,并获取所有文件夹的列表。我发现转换后的 FolderID 与绑定检索到的不同。我试图获取文件夹统计信息,转换 FolderID,并使用那些转换后的 FolderID 绑定到文件夹,但找不到文件夹。此时我将尝试以不同的方式执行此操作(Glen 的 FolderIdFromPath 函数),但我不明白为什么转换和检索的 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 = "UserA@domain.com"
# Import Web Services Module
Import-Module -Name "C:\Program Files\Microsoft\Exchange\Web Services.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)
当您从 Archive 文件夹转换 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