使用Add-MailboxFolderPermission共享日历遇ObjectNotFoundException求助
问题分析与解决方案
是不是微软侧的Bug?
是的,这属于Exchange Online/Outlook的已知异常场景,本质是日历对象的元数据或索引出现损坏/不一致。重命名日历的操作会触发Exchange后台对该日历对象的元数据刷新与索引重建,从而修复了导致共享失败的底层问题——哪怕改回原名,修复后的元数据已经正常,所以后续共享操作能顺利执行。
PowerShell脚本中的解决方法
可以在脚本中自动执行「临时重命名→改回原名」的修复流程,再执行共享操作,具体步骤如下:
1. 确认日历的正确标识
先通过以下命令确认目标日历的准确Identity(避免名称拼写/隐藏字符导致的解析错误):
Get-MailboxFolderStatistics -Identity "目标邮箱地址" | Where-Object {$_.FolderType -eq "Calendar"} | Select-Object Name, FolderId, Identity
输出结果中,Identity字段的格式通常为邮箱地址:\日历名称,这是后续命令需要使用的标准标识。
2. 自动修复并添加权限
将以下脚本中的变量替换为实际值,执行即可自动修复异常日历并完成共享:
# 配置参数 $targetMailbox = "user@contoso.com" $problemCalendar = "异常日历名称" $tempCalendarName = "$problemCalendar-Temp" $sharedUser = "shareduser@contoso.com" $accessLevel = "Reviewer" # 临时重命名日历,触发元数据刷新 Set-MailboxFolder -Identity "$targetMailbox`:$problemCalendar" -Name $tempCalendarName # 改回原日历名称 Set-MailboxFolder -Identity "$targetMailbox`:$tempCalendarName" -Name $problemCalendar # 执行共享操作 Add-MailboxFolderPermission -Identity "$targetMailbox`:$problemCalendar" -User $sharedUser -AccessRights $accessLevel -SendNotificationToUser $true
注意事项
- 执行脚本的账号需要具备Exchange Online的「Mailbox Folder Permissions」管理权限
- 如果同一邮箱下多个日历频繁出现该问题,建议提交微软支持工单,提供邮箱ID和日历的FolderID,请求后台修复元数据索引
- 部分情况下,日历名称包含特殊字符(如全角空格、非ASCII符号)也会触发该异常,重命名时可顺便清理这类字符
内容的提问来源于stack exchange,提问作者Jakob
相关产品推荐
相关产品推荐

