网站搜索

使用 Microsoft Graph API 通过 PowerShell 访问 Azure


Microsoft Graph API 允许您使用单个 REST API 点 (

https://graph.microsoft.com

)。您可能认为只有 Web 开发人员才对它感兴趣,但事实恰恰相反。 Microsoft 365 中的某些数据、对象或资源属性只能通过 Microsoft Graph 访问。要收集分析数据、统计信息或其他信息,Azure 管理员必须使用 Microsoft Graph。

在本文中,我们将向您展示如何使用 RESTful 和 PowerShell 在 Azure AD 中注册应用程序、获取身份验证令牌、连接到不同的 Microsoft 365 资源(Azure AD、Office 365、Intune、SharePoint、Teams、OneNote 等)

Invoke-RestMethod

cmdlet。您可以使用 Microsoft Graph 来获取数据和管理 Azure 中的对象。

在 Azure AD 上注册 Microsoft Graph 应用程序

若要使用 Microsoft Graph 访问 Azure 租户中的资源,需要创建新的 Azure AD 应用程序并允许其访问不同的 Azure 对象。

  1. 登录 Azure 门户 https://portal.azure.com/

  2. 转到Azure Active Directory -> 应用程序注册;

  3. 创建一个新应用(新注册);

  4. 输入您的应用程序名称:azGraphPowerShellApp,选择谁可以使用该应用程序:

    Accounts in this organizational directory only (tenantname only - Single tenant)

    然后点击注册;

  5. 然后选择允许您的应用程序访问哪些 Azure 资源。转到API权限部分;

  6. 默认情况下,应用程序只能读取有关当前 AzureAD 用户的数据(

    User.Read

    )。我们将授予其对 Microsoft 365 用户和组的所有属性的读取权限;

  7. 点击添加权限,选择Microsoft Graph;

  8. Microsoft Graph 中有两种基本权限类型(委托权限 - 当代表运行应用的用户执行某些操作时;应用程序权限 - 当外部脚本调用应用时)。选择应用程序权限;

  9. 在显示的列表中,您可以选择分配给应用程序访问 Azure 资源和对象的权限。在我的示例中,我添加了 Group ->

    Group.Read.All

    , 组成员 ->

    GroupMember.Read.All

    ,用户->

     User.Read.All

    (如果您希望应用程序读取租户中的任何数据,请选择

    Directory.Read.All

    );

  10. 点击授予管理员同意代表管理员授予访问权限。

要在应用程序中进行身份验证,您可以使用证书或密钥。秘密是自动生成的密码。用户名是应用程序 ID。让我们为您的应用程序创建一个秘密。

  1. 打开证书和机密 -> 新客户端机密;

  2. 输入密钥名称并设置其有效期(我指定了12个月);

  3. 复制值字段中的值(它是应用程序的密码)。将密码保存在 Azure Key Vault 或密码管理器中,因为退出应用程序后,密码值将被隐藏(您必须再次创建密码);

  4. 然后复制应用程序 ID(应用程序客户端 ID)和 Azure 租户 ID(目录租户 ID)。

将您的值粘贴到 PowerShell 变量:

$ApplicationID = "1111111-1111-1111-1111-11111111111"
$TenatDomainName = "2222222-2222-2222-2222-222222222222"
$AccessSecret = "3333333333333333333333333333333333333333333"

使用 PowerShell 连接到 Azure Microsoft Graph API

要从 PowerShell 使用 Microsoft Graph API,无需安装任何单独的 PowerShell 模块(如 Azure AD)。您可以使用内置的与它交互

Invoke-RestMethod

cmdlet。

要连接到 Graph API,您必须获取访问令牌。以下 PowerShell 脚本允许您在应用程序中进行身份验证并获取 Microsoft Graph API 访问令牌。

在此示例中,我们在脚本中使用机密(密码)作为纯文本。现实生活中,不建议这样做。您最好以交互方式请求机密或从机密保管库中提取机密(SecretManagement PowerShell 模块可以帮助您做到这一点)。另外,如果您将 PowerShell 脚本存储在 Git 上,请注意保护您的秘密。

$ApplicationID = "1111111-1111-1111-1111-11111111111"
$TenatDomainName = "2222222-2222-2222-2222-222222222222"
$AccessSecret = "3333333333333333333333333333333333333333333"
$Body = @{
Grant_Type    = "client_credentials"
Scope         = "https://graph.microsoft.com/.default"
client_Id     = $ApplicationID
Client_Secret = $AccessSecret
}
$ConnectGraph = Invoke-RestMethod -Uri https://login.microsoftonline.com/$TenatDomainName/oauth2/v2.0/token -Method POST -Body $Body
$token = $ConnectGraph.access_token

使用该令牌,您可以使用 GraphAPI 对 Azure 租户运行不同的查询。

例如,下面的脚本显示 Azure AD 中的组列表:

$GrapGroupUrl = 'https://graph.microsoft.com/v1.0/Groups/'
(Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"} -Uri $GrapGroupUrl -Method Get).value.displayName

您可以显示创建 Azure AD 组的日期:

$GrapGroupUrl = 'https://graph.microsoft.com/v1.0/Groups/'
$Groups=(Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"} -Uri $GrapGroupUrl -Method Get).value
$Groups | select displayName,createdDateTime

要显示用户名、UPN 和电子邮件地址:

$GrapUserUrl = 'https://graph.microsoft.com/v1.0/users'
$users=(Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"} -Uri $GrapUserUrl -Method Get).value
$users | select displayName,userprincipalname,mail

如果您尚未向应用程序授予访问 Azure AD 对象的权限,则在尝试运行 Invoke-RestMethod 时将出现以下错误:

The remote server returned an error: (403) Forbidden.

在上面的示例中,我们仅使用 GET 方法从 Azure AD 读取数据。但您也可以使用 POST、PUT、PATCH 或 DELETE 方法进行更改。例如,您可以在 Azure AD 中创建用户、重置密码、更改描述等。

要在浏览器中查看可用的 Microsoft Graph API 属性或方法,您可以使用 Graph Explorer (https://developer.microsoft.com/en-us/graph/graph-explorer)。

Microsoft 还有一个特殊的 Microsoft Graph PowerShell SDK 用于与 Microsoft Graph 交互(

Install-Module Microsoft.Graph

)。但我们展示了您可以直接从 PowerShell 访问 Microsoft Graph。

相关文章