[玩转系统] 如何从 PowerShell 连接到 Microsoft Graph API?
作者:精品下载站 日期:2024-12-15 00:28:30 浏览:17 分类:玩电脑
如何从 PowerShell 连接到 Microsoft Graph API?
介绍
Microsoft Graph API 是一种 RESTful Web API,它整合了对各种 Microsoft 365 服务的访问,使开发人员能够创建与跨多个平台(包括 Azure Active Directory、SharePoint、OneDrive、Outlook 等)的数据进行交互的应用程序。 Microsoft Graph PowerShell 适用于所有平台,包括 Windows、macOS 和 Linux。支持现代身份验证。 PowerShell 是一种广泛使用的脚本语言和自动化工具,可用于连接 Graph API 并与之交互,使其成为 IT 专业人员的一项基本技能。在本初学者指南中,我们将全面概述 Graph API,讨论连接到它的先决条件、安装和配置、身份验证,以及使用 PowerShell 连接到 Graph API 的分步指南,并提供示例以及沿途的解释。
安装 Microsoft.Graph PowerShell 模块
首先,您需要安装 Microsoft Graph PowerShell 模块。该模块提供了一组 cmdlet,允许您与 Graph API 进行交互。在提升的 PowerShell 会话中运行以下命令:
使用以下 PowerShell 命令检查是否已安装 Microsoft Graph PowerShell 模块:
Get-InstalledModule | Where-Object {$_.Name -match "Microsoft.Graph"}
安装 Microsoft Graph PowerShell 模块:
Install-Module -Name "Microsoft.Graph"
要为当前用户范围安装 Microsoft graph PowerShell SDK:
Install-Module Microsoft.Graph -Scope CurrentUser
这将安装 Microsoft Graph 和子模块(截至目前有 38 个)。等待安装完成。
更新 Microsoft Graph PowerShell 模块
要更新现有模块,请使用以下命令:
Update-Module Microsoft.Graph
卸载 Microsoft Graph PowerShell 模块
Microsoft Graph 有一个主模块和多个子模块。要卸载Graph模块,我们必须先卸载主模块:
Uninstall-Module Microsoft.Graph
然后卸载Microsoft Graph的所有子模块。最后必须卸载身份验证模块,因为其他模块依赖于它。
#Uninstall all Sub-modules of Graph
Get-InstalledModule Microsoft.Graph.* | ForEach-Object { if($_.Name -ne "Microsoft.Graph.Authentication") {
Uninstall-Module $_.Name }
}
#Uninstall the dependant module
Uninstall-Module Microsoft.Graph.Authentication
如何使用PowerShell调用Graph API?
安装 Microsoft.Graph 模块后,您可以开始使用 Graph API 来执行各种任务。它支持委派访问(用户可以登录并同意),以及无人值守场景的仅应用程序访问。使用 Connect-MgGraph
命令通过所需的范围登录。连接后,您可以调用任何可用的 Graph API 方法。
方法 1:通过 PowerShell 的委派访问连接到 Graph API
您将使用委派访问权限以用户身份登录,同意 SDK 代表您执行所需的范围,并调用 Microsoft Graph。以下是使用 PowerShell 获取用户信息的示例:
#Connect to Microsoft Graph
Connect-MgGraph -Scopes "User.Read.All"
#Get All users
$users = Get-MgUser
$users | Select-Object DisplayName, UserPrincipalName, Mail
这将提示进行身份验证,您需要使用管理员帐户登录以同意所需的范围。
连接后,该命令将通过 Welcome To Microsoft Graph!
消息指示成功。 Get-MgUser 命令输出 Microsoft 365 组织中的用户列表。
如果您想连接到 Graph API 的 Beta 版本,请使用 Select-MgProfile -Name "beta"
cmdlet。这是获取用户上次登录日期和时间戳的另一个示例:
#Connect to Microsoft Graph
Connect-MgGraph -Scopes "AuditLog.Read.All", "User.Read.All"
#Set the Graph Profile
Select-MgProfile -Name "beta"
#Properties to Retrieve
$Properties = @(
'Id','DisplayName','UserPrincipalName','UserType', 'AccountEnabled', 'SignInActivity'
)
#Get All users along with the properties
$AllUsers = Get-MgUser -All -Property $Properties
$SigninLogs = @()
ForEach ($User in $AllUsers)
{
$SigninLogs += [PSCustomObject][ordered]@{
LoginName = $User.UserPrincipalName
DisplayName = $User.DisplayName
UserType = $User.UserType
AccountEnabled = $User.AccountEnabled
LastSignIn = $User.SignInActivity.LastSignInDateTime
}
}
$SigninLogs
#Disconnect MS Graph
Disconnect-MgGraph
同样,要使用 Microsoft Graph API 连接到 SharePoint Online 网站,请使用以下 PowerShell:
#Parameters
$SiteID = "0defaa16-1fc5-4a55-bbec-a06d10de2a42"
#Connect to Microsoft Graph
Connect-MgGraph -Scopes "Sites.FullControl.All"
#Get a SharePoint Site collection
$Site = Get-MGSite -SiteId $SiteId
#Get All document libraries from the site
Get-MgSiteDrive -SiteId $SiteId
将 Microsoft Graph API 与 PowerShell 结合使用的示例
让您了解 Microsoft Graph API 和 PowerShell 的功能。您也可以执行批量操作。这里有一些例子:
- 要获取上下文,请使用:
Get-MgContext
- 检索 Office 365 中所有用户的列表:
Get-MgUser
- 创建新的 SharePoint 网站:
New-MgSite
- 检索特定用户的所有 OneDrive 文件的列表:
Get-MgDriveItem -DriveId -DriveItemId
如您所见,Microsoft Graph API 和 PowerShell 具有无限的可能性。
查找图形命令所需的权限范围
我们用于连接 Microsoft Graph 的登录用户或客户端 ID 必须有权访问特定范围。例如,如果您想使用 Update-MgUser 命令更新用户配置文件,您可以使用“User.ReadWrite.All”范围来执行此操作。要查找所需的范围,请使用 Find-MgGraphCommand cmdlet。例如。,
Find-MgGraphCommand -command Update-MgUser | Select -First 1 -ExpandProperty Permissions
要获取 Microsoft Graph PowerShell 模块中所有可用的 cmdlet,您可以使用以下命令:
Get-command -Module Microsoft.Graph*
Microsoft Graph 1.25 版本中有 9275 个可用的 cmdlet!
方法 2:使用 PowerShell 中的 App ID 连接到 Graph API
在我们开始之前,您需要满足一些先决条件:
- 您需要在 Azure AD 中注册应用程序。
- 您需要授予应用程序访问 Graph API 的权限。
- 将证书或客户端密钥添加到应用程序 ID。该证书可以是自签名的或来自权威机构的。
在 Azure AD 中注册应用程序
在使用 PowerShell 连接到 Graph API 之前,必须在 Azure AD 中注册应用程序以获得必要的权限和凭据。
要在 Azure AD 中注册应用程序,请执行以下步骤:
- 登录 Azure AD 门户 (https://aad.portal.azure.com/)。
单击左侧菜单中的“Azure Active Directory”>> 单击“应用程序注册”>> 单击“新注册”。
输入应用程序的名称,然后选择“仅限此组织目录中的帐户”作为支持的帐户类型。
- 点击“注册”。
注册应用程序后,您将被重定向到应用程序的仪表板。记下“应用程序(客户端)ID”和“目录(租户)ID”,因为我们稍后会需要它们。
授予应用程序权限
要访问 Graph API,您的应用程序必须具有适当的权限。要向应用程序授予权限,请执行以下步骤:
在您创建的应用程序的左侧菜单中单击“API 权限”>> 单击“添加权限”。
选择“Microsoft Graph”作为 API。
搜索并选择所需的权限(例如,“Sites.FullControl.All”用于获得对所有 SharePoint Online 网站的完全控制)。
- 单击“添加权限”。
单击“授予>单击“证书和秘密”>>单击“证书”选项卡。
- 点击“上传证书”。
浏览到生成的 CER 文件,然后单击“添加”按钮。
- 记下“指纹”。这是与证书关联的安全密钥,用于对应用程序进行身份验证。
将客户端密钥添加到应用程序
同样,要将客户端密钥添加到应用程序,请执行以下操作:
使用证书从 PowerShell 连接到具有 App ID 的 Graph API
现在我们已经注册了一个应用程序并授予了权限,并向其添加了客户端密钥和证书。我们已准备好从 PowerShell 连接到 Graph API。以下是使用证书指纹连接到 Microsoft Graph API 的方法:
#Parameters for Tenant ID and Client ID
$TenantID = "c1c2b173-4240-4775-a49a-6351b30cd2f6"
$ClientID = "3c1540f7-9565-4aae-b398-f47ac91cfc06" #App ID
$CertThumbPrint = "63FDD807AE01C1EB34CE5647D164E3C153C0FA7"
#Connect to Microsoft Graph using App
Connect-MgGraph -ClientID $ClientID -TenantId $TenantID -CertificateThumbprint $CertThumbPrint
使用客户端密钥连接到 Graph API
如果您想使用客户端密钥,这里是适合您的 PowerShell 脚本!
#App Registration details
$TenantID = "c1c2b173-4240-4775-a49a-6351b30cd2f6"
$ClientID = "3c1540f7-9565-4aae-b398-f47ac91cfc06"
$ClientSecret = "9Ad2Q~DA-yLotNvvaplkchnnf__6D5zdFJi1mb4l"
$Body = @{
Grant_Type = "client_credentials"
Scope = "https://graph.microsoft.com/.default"
Client_Id = $ClientID
Client_Secret = $ClientSecret
}
$Connection = Invoke-RestMethod `
-Uri https://login.microsoftonline.com/$TenantID/oauth2/v2.0/token `
-Method POST `
-Body $body
#Get the Access Token
$Token = $Connection.access_token
#Connect to Microsoft Graph
Connect-MgGraph -AccessToken $Token
Microsoft Graph cmdlet 是 Rest API 调用的包装器。您还可以调用 Invoke-Webrequests 方法来与任何底层 REST API 方法进行交互。
#App Registration details
$TenantID = "c1c2b173-4240-4775-a49a-6351b30cd2f6"
$ClientID = "3c1540f7-9565-4aae-b398-f47ac91cfc06"
$ClientSecret = "9dd8Q~DA-yLotavvabkchnnf__6c5VdFJi0mb1l"
$Domain = "Crescent"
$Body = @{
Grant_Type = "client_credentials"
Scope = "https://graph.microsoft.com/.default"
Client_Id = $ClientID
Client_Secret = $ClientSecret
}
$Connection = Invoke-RestMethod `
-Uri https://login.microsoftonline.com/$TenantID/oauth2/v2.0/token `
-Method POST `
-Body $body
#Get the Access Token
$AuthHeader = @{
'Authorization'="Bearer $($Connection.access_token)"
}
#Get all sites
$URI = "https://graph.microsoft.com/v1.0/sites"
$WebRequest = Invoke-WebRequest -Headers $AuthHeader -Uri $URI
$Result = ($WebRequest.Content | ConvertFrom-Json).Value
#Get all site collections of the domain
$Result | Where {$_.siteCollection.Hostname -eq "$Domain.sharepoint.com"} | select name,webUrl,id
图形浏览器
对于初学者来说,为任务找到正确的 API 方法可能具有挑战性。您可以使用 Graph Explore 或 Rest API Reference 作为起点。
常见错误和故障排除提示
虽然通过 PowerShell 使用 Azure AD Graph API 和 Microsoft Graph API 通常很简单,但您可能会遇到一些常见错误。一种常见错误是“远程服务器返回错误:(401) 未经授权。”您还可能会收到“没有足够的权限来完成操作”。这通常意味着您的凭据不正确,或者您没有访问 Graph API 的适当权限。仔细检查您的凭据和权限以确保它们正确。
另一个常见错误是“术语‘cmdlet 名称’未被识别为 cmdlet 的名称。”这通常意味着未安装或加载适当的 PowerShell 模块。确保您已为您尝试使用的 cmdlet 安装并加载了适当的模块。
结论
在本初学者指南中,我们介绍了使用 PowerShell 连接到 Microsoft Graph API 的基本知识,从设置环境和身份验证到进行 API 调用。我们还了解了如何在 Azure AD 中注册应用程序、向其授予权限以及向应用程序添加客户端密钥。借助本指南中获得的知识,您可以开始自动化任务并更有效地管理 Microsoft 365 环境。
接下来的步骤可能是探索 Microsoft Graph API PowerShell 模块提供的更多 cmdlet,或者开始构建自己的 PowerShell 脚本来自动执行常见任务。可能性是无限的,所以今天就开始吧!
经常问的问题:
Microsoft Graph 的用途是什么?
Microsoft Graph API 是一个统一的 RESTful API 端点,使开发人员能够访问 Microsoft 云中提供的数据、情报和服务并与之交互。它充当跨多个 Microsoft 服务(如 Office 365、Azure Active Directory、企业移动性和安全、Windows 等等。
如何在 PowerShell 中安装 Microsoft Graph?
要安装 Microsoft Graph PowerShell SDK,请在 PowerShell 会话中运行以下命令:
Install-Module -Name Microsoft.Graph
此命令安装 Microsoft.Graph 模块,提供用于与 PowerShell 中的 Microsoft Graph API 交互的 cmdlet。
Microsoft Graph PowerShell 需要哪些权限?
这取决于您要访问的具体 API 端点和资源!一般来说,Microsoft Graph 中有两种类型的权限:
1.委派权限:代表登录用户进行操作。
2.应用程序权限:这些权限授予无需用户交互即可运行的应用程序,例如后台服务。
您需要在 Azure 门户中注册应用程序,为应用程序分配权限,授予管理员同意,然后使用注册的应用程序的权限PowerShell 脚本中的凭据。
为什么我们应该转向 Microsoft Graph API PowerShell SDK?
因为 AzureAD、MSOnline 和 AzureADPreview PowerShell 模块已计划弃用。为了做好准备,管理员应该开始使用新的 Microsoft Graph PowerShell SDK 模块。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[短剧合集] 2025年06月2日 精选+付费短剧推荐39部
[软件合集] 25年6月2日 精选软件18个
[软件合集] 25年6月1日 精选软件15个
[短剧合集] 2025年06月1日 精选+付费短剧推荐59部
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[美图] 2W美女个美女小姐姐,饱眼福
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag