调用Get-MgUserCalendar访问自身日历遇404对象未找到错误求助
使用PowerShell访问Microsoft Graph日历时遇到404错误的排查建议
问题描述
尝试通过PowerShell访问个人日历时返回404错误,错误信息显示指定对象未找到,尽管当前权限看起来符合要求。
执行代码
Install-Module Microsoft.Graph Import-Module Microsoft.Graph.Calendar $creds = Get-Credential -UserName "<my user name>" # 获取可用的Graph权限范围 Connect-MgGraph Get-MgContext | Select-Object -ExpandProperty Scopes $userId = (Get-MgUser -Filter "Mail eq '$($creds.UserName)'").Id # 获取日历权限 Find-MgGraphCommand -command Get-MgUserCalendar | Select-Object -ExpandProperty Permissions Get-MgUserCalendar -UserId $userId
错误信息
Get-MgUserCalendar_List: 指定的对象在存储中未找到。
Status: 404 (NotFound)
ErrorCode: ErrorItemNotFound
当前已授权的权限范围
Application.Read.All Application.ReadWrite.All Calendars.Read.Shared DelegatedPermissionGrant.ReadWrite.All openid Policy.ReadWrite.PermissionGrant profile User.Read User.ReadWrite.All email
Get-MgUserCalendar所需权限
| 名称 | 是否管理员 | 描述 | 完整描述 |
|---|---|---|---|
| Calendars.ReadBasic | False | 权限名称不可用 | 权限描述不可用 |
| Calendars.Read.Shared | False | 读取你有权访问的日历 | 允许应用读取所有日历中的事件… |
| Calendars.ReadWrite | False | 读取和写入所有邮箱中的日历 | 允许应用创建、读取、更新和删除所有邮箱中日历的事件、日程和日历… |
| Calendars.Read | False | 读取所有邮箱中的日历 | 允许应用读取所有邮箱中日历的所有事件、日程和日历… |
环境信息
- PowerShell版本:7.4.5
- Microsoft.Graph模块版本:2.23.0
补充截图说明
- Graph日历查询结果:通过Graph浏览器查询日历接口,返回了包含ID、名称等字段的正常日历数据
Get-MgUserCalendar执行结果:PowerShell终端中显示完整的404错误提示信息
排查建议
- 验证用户ID准确性:单独执行
Get-MgUser -Filter "Mail eq '$($creds.UserName)'",确认返回的用户ID是否属于你的账号,避免邮箱匹配错误导致获取到无效ID。 - 补充必要权限:当前仅授权
Calendars.Read.Shared,该权限仅能读取共享给你的日历,无法访问个人默认日历。需添加Calendars.Read或Calendars.ReadBasic权限后重新连接:Connect-MgGraph -Scopes "Calendars.Read", "User.Read" - 简化调用方式:访问自己的日历无需手动获取用户ID,直接使用
me作为用户ID参数:Get-MgUserCalendar -UserId "me" - 检查默认日历状态:通过Microsoft 365网页端确认个人默认日历是否存在,排除日历被意外删除的可能。
- 测试基础API调用:尝试调用日历视图接口排查问题:
Get-MgUserCalendarView -UserId "me" -StartDateTime (Get-Date).AddDays(-7) -EndDateTime (Get-Date).AddDays(7)
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

