当前位置: 首页 > 知识库问答 >
问题:

Office 365 EWS-GetUser可用性ID为空

卓云
2023-03-14

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

我用来连接EWS的用户拥有模拟权限,除一件事外,其他一切都正常工作。

当我遍历AttendeesAvailability集合,然后遍历其CalendarEvents集合中的每个CalendarEvent时,我能够看到Details对象并访问诸如Subject、Location、IsPrivate等内容...

我的问题是细节。StoreId始终为空。

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

这让我相信这是Exchange中服务用户的权限问题。所以,我慢慢地提高了权限级别,希望能达到最佳状态,但是什么也没有。用户现在是Exchange管理员(我认为他应该对Exchange环境中的任何东西都有全面的访问权——包括每个人邮箱中的日历项目)。仍然不快乐。

那么,这是 Exchange 安装程序的配置问题吗?

值得注意的是,我的应用程序所具有的所有其他功能都非常完美。我缺少的只是这个身份证。

我对此感到茫然。如果不是因为封锁而剃光了头,我现在就会拔头发。

任何帮助或建议将不胜感激。

干杯

因此,我发现,如果我在进行身份验证的服务帐户上执行相同的过程,则会返回 StoreId。此帐户是在从本地迁移到 O365 后创建的(这可能没有任何意义)。我正在访问自迁移以来创建的另一个帐户,以查看它是否也适用于该帐户。这将帮助我确定问题可能仅与迁移的邮箱有关,还是与用于进行身份验证的帐户以外的任何邮箱有关。我会尽快更新...

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

这让我相信这是一个权限问题。现在的问题是找出神奇的许可是什么。我仍然不明白为什么我找不回的只是我的本我。

仍然愿意接受任何建议。

看起来在EWS版本之间可能会有一些不同。

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

共有2个答案

侯向文
2023-03-14

问题可能与您用于Exchange服务身份验证的帐户对目标账号没有足够的权限有关。请使用以下命令授予权限,然后重试。

Add-MailboxFolderPermission -Identity User@domain.com:\Calendar -User serviceceaccount@domain.com -AccessRights Reviewer

这是一个非常恼人的问题,我过去曾与微软发生过一起事件,但得到了令人失望的答案,即这种情况不会很快改变。

下面是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

南门欣怡
2023-03-14

所以,已经有一段时间了,但是微软现在已经解决了这个问题,并且现有的代码现在工作正常。

我也可以确认这在使用OAuth时也有效。

 类似资料:
  • 问题内容: 我正在尝试一个需要Facebook用户提供一些信息的网站,正在使用PHP和JS SDK。 我在PHP中有一个功能: 在一个类中,该类包含来自SDK的facebook对象。 然后在一个块上,我这样做: FB JS环境已正确设置(我认为),因此可以正常工作。因此,用户会弹出窗口并授权该站点。 问题是即使用户授权了该应用程序之后,$ user也始终为0,这意味着始终返回0,然后列出用户(包括

  • 可达性 一个产品,如果对于任何人(无论能力)而言,都是非常容易掌握、理解并可以用之来完成他们的目标的话,那么这个产品就是可达的。一个成功的产品对于任何可能的使用者来说都应该是可达的。 这些设计准则对于想要了解可达性的设计师而言是一个很好的起点。设计完全可达的产品是一个复杂的课题,需要深入研究。欲了解更多信息,请访问谷歌的可达性网站。 如何使你的产品更好地服务于身有残疾的用户? 首先,让你的产品使用

  • 说明: int Connection::$id 连接的id。这是一个自增的整数。 注意:workerman是多进程的,每个进程内部会维护一个自增的connection id,所以多个进程之间的connection id会有重复。 如果想要不重复的connection id 可以根据需要给connection->id重新赋值,例如加上worker->id前缀。 参见 Worker的connectio

  • 要求(workerman >= 3.2.1) 说明: int Worker::$id 当前worker进程的id编号,范围为0到$worker->count-1。 这个属性对于区分worker进程非常有用,例如1个worker实例有多个进程,开发者只想在其中一个进程中设置定时器,则可以通过识别进程编号id来做到这一点,比如只在该worker实例id编号为0的进程设置定时器(见范例)。 注意: 进程

  • 全部显示 Id 属性应用于CommandBarButton、CommandBarComboBox 和CommandBarControl 对象的情形。 返回内置的命令栏控件的 ID 号。Long 类型,只读。 expression.Id expression 必需。该表达式返回上述对象之一。 说明 控件的 ID 号决定了控件的内置动作。所有自定义控件 ID 属性的值都是 1。 Id 属性应用于Scr

  • 可达性 双向性