Office 365 EWS - GetUserAvailability ID为空。

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

我正在使用EWS连接到365上的Exchange,并使用ExchangeService对象上的GetUserAvailability方法为一些用户(不超过30个)检索日历项的集合。

我的用户,我使用连接到EWS有冒充权限,一切都在工作,除了一件事。

当我循环通过AttendeesAvailability集合,然后通过每个CalendarEvent在其CalendarEvents集合,我能够看到的细节对象和访问的东西,如主题,位置,IsPrivate等......。

我遇到的问题是,Details.StoreId总是为空。

我有两个365 Exchange环境,我们的和客户的。 当我尝试在我们的环境中访问StoreId时,它的工作绝对正常,并具有预期的唯一ID。 当我在客户端的实例上运行相同的 come 时,它是空的;但所有其他属性都为 Details 对象填充。

这让我相信,这是Exchange内服务用户的权限问题。因此,我慢慢地提高了权限级别,希望能达到最佳状态,但没有任何结果。 该用户现在是一个 Exchange 管理员(我相信它应该对 Exchange 环境中的任何东西都有全面的访问权 - 包括每个人邮箱的日历项目)。 还是不欢乐。

那么,这是Exchange设置的配置问题吗?

值得注意的是,我的应用程序具有的所有其他功能,都能完美地工作。 只是我缺少了这个ID。

我对这个问题一筹莫展。如果不是因为我因为锁定而剃了光头,我现在就会把头发拔光。

如果有任何帮助或建议,我将非常感激。

欢呼

更新1

因此,我发现,如果我在我正在进行身份验证的服务账户上执行相同的过程,我就会得到StoreId的回复。 这个账户是在从on-prem迁移到O365之后创建的(这可能毫无意义)。我正在访问另一个自迁移后创建的账户,看看它是否对那个账户也有效。 这将帮助我确定问题是否可能只与迁移的邮箱有关,还是与除用于验证的帐户之外的任何邮箱有关。我将很快更新...

更新2

我已经对一个新账户进行了测试。 我将新账户的日历上的默认权限设置为Reviewer(甚至尝试了Owner和Anonymous,只是为了保证安全)。 当我使用服务账户进行身份验证时,我没有得到StoreId。 当我使用新的测试账户进行身份验证时,我确实得到了StoreId。

这让我相信这是一个权限问题。现在的情况是找出那个神奇的权限是什么。我还是不明白,为什么只有ID没有得到回馈。

还是希望大家能给点建议。

更新3

看起来可能是EWS上的构建版本不同。

工作的版本报告的服务器版本是15.20.3021.030.不工作的版本是15.20.3045.019。

c# asp.net exchangewebservices
1个回答
0
投票

该问题可能与没有足够的权限有关,从你用于Exchange服务认证的帐户到目标帐户.使用下面的命令给予权限并再次尝试。

Add-MailboxFolderPermission -Identity [email protected]:\Calendar -User [email protected] -AccessRights Reviewer

这是一个非常烦人的问题,我过去曾向MS开过一个事件,但得到的答复是这个问题不会很快改变,令人失望。

下面是PS代码,可以给所有用户、房间、资源设置权限,不受文化(语言)和日历文件夹名称的影响。

Param(
     [parameter(position=0,Mandatory=$true)][string] $serviceaccount,
     [parameter(position=1,Mandatory=$true)][string] $mailboxtype
)

$acl = "Reviewer"

if ($mailboxtype -eq "All") {
    $mailboxes = Get-Mailbox | Where {$_.RecipientTypeDetails -eq "UserMailbox" -or $_.RecipientTypeDetails -eq "RoomMailbox" -or $_.RecipientTypeDetails -eq "EquipmentMailbox"} | Select -expand PrimarySmtpAddress | Select -expand Address | Where {$_ -NotLike "Administrator@*"}
}
elseif ($mailboxtype -eq "Users") {
    $mailboxes = Get-Mailbox | Where {$_.RecipientTypeDetails -eq "UserMailbox"} | Select -expand PrimarySmtpAddress | Select -expand Address | Where {$_ -NotLike "Administrator@*"}
}
elseif ($mailboxtype -eq "Resources") {
    $mailboxes = Get-Mailbox | Where {$_.RecipientTypeDetails -eq "RoomMailbox" -or $_.RecipientTypeDetails -eq "EquipmentMailbox"} | Select -expand PrimarySmtpAddress | Select -expand Address
}
else {
"Error specifying target mailbox type. Choose one of: 'All', 'Users' or 'Resources'.`n
'All' - UserMailbox, RoomMailbox, EquipmentMailbox.`n
'Users' - UserMailbox.`n
'Resources' - RoomMailbox, EquipmentMailbox."
}

foreach ($mbx in $mailboxes)
{
    $calName = Get-MailboxFolderStatistics -Identity $mbx -FolderScope Calendar | Where-Object { $_.FolderType -eq 'Calendar'} | Select-Object Name, FolderId #-ErrorAction Stop
    #echo "${mbx}:\$($calName.Name)"
    Add-MailboxFolderPermission -Identity ${mbx}:\$($calName.Name) -User $serviceaccount -AccessRights $acl | Select-Object Identity, FolderName, User, AccessRights
}

保存为PS脚本,调用两个参数:serviceaccount &mailboxtype。

© www.soinside.com 2019 - 2024. All rights reserved.