ID格式错误时读取自定义文件夹通过图形API



GET/users/mailbox@server.com/mailFolders/Inbox/messages

工作好。

当我想读取一个特定的文件夹时,我通过

获取文件夹的idGet-MailboxFolderStatistics -Identity mailbox@server.com | select Name, FolderId, FolderPath

但当我尝试

GET/用户/mailbox@server.com/mailFolders/FolderId/messages

我得到以下错误信息:

{"error"; {"code"; errorinvaliddmalformed ";message"; "Id是malformed."}}

我需要翻译ID吗?有这样的命令吗?

Get-MailboxFolderStatistics返回的是EWS中的owaId,图可以转换eid的https://learn.microsoft.com/en-us/graph/api/user-translateexchangeids?view=graph-rest-1.0&tabs=http,但不能转换那种格式的id。然而,你可以从owaId中提取HexEntryId (prEntryId)将其从Base64转换并移除填充然后你需要将其重新编码为Base64safeurl然后你应该能够翻译它例如这里是使用图形PowerShell SDK的示例

$MailboxName = "blah@domain.com"
Connect-ExchangeOnline
$Folders = Get-MailboxFolderStatistics -Identity $MailboxName  | select Name, FolderId, FolderPath
Add-Type -AssemblyName System.Web 
Connect-MgGraph -Scopes Mail.Read
$HexEntryId = [System.BitConverter]::ToString([Convert]::FromBase64String($Folders[0].FolderId.ToString())).Replace("-","").Substring(2)  
$HexEntryId =  $HexEntryId.SubString(0,($HexEntryId.Length-2))
$FolderIdBytes = [byte[]]::new($HexEntryId.Length / 2)
For($i=0; $i -lt $HexEntryId.Length; $i+=2){
$FolderIdBytes[$i/2] = [convert]::ToByte($HexEntryId.Substring($i, 2), 16)
}
$FolderIdToConvert = [System.Web.HttpServerUtility]::UrlTokenEncode($FolderIdBytes)
$ConvertRequest = @"
{
"inputIds" : [
"$FolderIdToConvert"
],
"sourceIdType": "entryId",
"targetIdType": "restId"
}
"@
$ConvertResult =  Invoke-MgGraphRequest -Method POST -Uri https://graph.microsoft.com/v1.0/me/translateExchangeIds -Body $ConvertRequest
return Get-MgUserMailFolder -UserId $MailboxName -MailFolderId  $ConvertResult.Value.targetId

最新更新