Microsoft Graph 已经成为访问 Microsoft 365 和 Entra ID 数据的统一 API 网关。无论是用户管理、邮件处理、团队协作还是安全合规,几乎所有 Microsoft 云服务的数据和操作都可以通过 Graph API 完成。对于 PowerShell 运维人员来说,掌握 Graph API 的高级用法意味着能够构建更高效、更可靠的自动化流程。
然而,在实际生产环境中,简单的 API 调用往往不够。当需要处理成千上万个用户对象、执行批量许可分配、或者生成复杂的安全审计报告时,必须考虑认证效率、请求优化、分页处理和错误重试等工程化问题。本文将围绕这些高级场景,分享一套可直接用于生产环境的 Graph API 操作模式。
已创建用户: zhang.wei@contoso.com 已创建用户: li.na@contoso.com 创建用户失败 wang.fang@contoso.com : Another object with the same value for property userPrincipalName already exists. 已归档组: 2024-Q3-项目组 已更换组 安全审计组 的所有者为 3a5b7c9d-1234-5678-abcd-ef0123456789
API 权限分为两种类型:Scope(委派权限,代表用户执行操作)和 Role(应用程序权限,应用以自身身份执行操作)。RequiredResourceAccess 仅声明了应用”需要”哪些权限,实际生效还需要管理员通过同意流程(Admin Consent)审批。权限 ID 可以通过查询目标 API 服务主体的 Oauth2PermissionScopes(委派权限)或 AppRoles(应用程序权限)属性获取。
批量审计租户内的应用注册
对于安全团队和 IT 管理员而言,定期审计租户内的应用注册状况是保障身份安全的重要环节。以下脚本批量获取所有应用注册,并生成包含凭据状态、权限范围等信息的审计报告。
这段脚本对租户内所有应用注册进行了全面审计,重点关注三个安全维度:凭据生命周期(是否存在过期或即将过期的密钥)、权限范围(申请了多少 API 权限)、应用可见性(是否为多租户应用,意味着其他组织的用户也能看到)。建议将此脚本配置为每周自动执行,配合邮件或 Teams 通知,在凭据即将过期或出现异常配置时及时预警。
在混合办公和零信任架构日益普及的今天,条件访问(Conditional Access)已成为 Microsoft Entra ID(原 Azure AD)中最核心的安全控制手段之一。通过条件访问策略,管理员可以根据用户位置、设备状态、风险等级等信号,动态决定是否允许访问特定资源。然而,随着策略数量增长,手动管理门户中的数十条策略变得极其低效且容易出错。
PowerShell 与 Microsoft Graph API 的结合为条件访问策略的管理提供了自动化能力。无论是批量审计现有策略、快速创建标准化的安全基线策略,还是在紧急安全事件中快速调整策略状态,脚本化操作都比手动点击门户界面更可靠、更快速。特别是在多租户环境下,统一的脚本可以帮助安全团队确保所有租户的策略配置保持一致。
本文将介绍如何使用 PowerShell 通过 Microsoft Graph API 查询、创建、更新和报告条件访问策略,帮助你在日常运维和安全运营中提升效率。
适用于 PowerShell 5.1 及以上版本,需要 Microsoft Graph PowerShell SDK 或 Azure AD 租户
Microsoft Graph API 是微软云服务的统一入口——Azure AD(Entra ID)用户管理、Teams 消息、SharePoint 文件、Outlook 邮件、OneDrive,几乎所有 Microsoft 365 服务都通过 Graph API 暴露。Microsoft Graph PowerShell SDK 封装了这些 API,让运维人员可以用 PowerShell 管理整个 Microsoft 365 生态。
本文将讲解 Microsoft Graph PowerShell SDK 的高级用法和实用的管理场景。
DisplayName : 张三 Mail : zhangsan@contoso.com JobTitle : 高级工程师
已禁用账户:15 个 DisplayName Mail --------------- 离职用户A usera@contoso.com 离职用户B userb@contoso.com
CreatedDateTime AppDisplayName ClientAppUsed Status ------------------------------------------------ 2025-07-28T07:30:15Z Outlook Browser Success 2025-07-28T07:15:22Z Microsoft Teams Desktop App Success
DisplayName UserPrincipalName Department JobTitle ----------- ----------------- ---------- -------- John Doe john.doe@contoso.com Engineering Senior Dev Jane Smith jane.smith@contoso.com HR HR Manager
Id : 12345678-abcd-... DisplayName : John Doe UserPrincipalName : john.doe@contoso.com 用户已创建:wei.zhang@contoso.com