You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Graph API在SharePoint Online列表根目录创建文件夹并共享给外部用户

在SharePoint Online列表根目录创建文件夹并共享给外部用户的解决方案

需求说明

  • 在具备独立权限的文件夹内创建列表项
  • 将该父文件夹共享给外部用户

问题分析

无法直接通过Graph API在SharePoint Online列表根目录创建文件夹并完成外部用户共享;已知SharePoint REST API可实现此操作,但客户端应用无法调用(例如通过PowerShell结合应用注册/OAuth获取的令牌,在SPO环境中无效,但在Graph环境中可正常使用)。

解决方案:Graph API + PnP PowerShell 结合方案

1. 通过Graph API将外部用户添加到租户

使用客户端凭证流获取Graph API令牌,调用邀请接口添加外部用户:

cls
$SiteURL="https://your_domain.sharepoint.com/sites/your_site/"
$ClientID = "00000000-0000-0000-0000-000000000000"

$tenantdomain="your_domain.onmicrosoft.com"
$ClientSecret = "base64 string"
$tenantid="12345678-1234-1234-1234-123456789999"
$thumbprint="06D3488F67CC8F90B2CA2C0DE48AB354E0E4259A"

#API info
$loginURL = "https://login.microsoftonline.com/"
$resource = "https://graph.microsoft.com"

# 获取Oauth 2访问令牌
$body = @{grant_type="client_credentials";resource=$resource;client_id=$ClientID;client_secret=$ClientSecret}
$oauth = Invoke-RestMethod -Method Post -Uri $loginURL/$tenantdomain/oauth2/token?api-version=1.0 -Body $body

# 设置请求头
$headerParams  = @{'Authorization'="$($oauth.token_type) $($oauth.access_token)"}

# 调用Graph邀请接口
$uri ="https://graph.microsoft.com/v1.0/invitations"

$body = @{
    invitedUserDisplayName="test";invitedUserEmailAddress="user_email@gmail.com";sendInvitationMessage=$false;inviteRedirectUrls="https://myapp.com"
}
$jsonBody = $body | ConvertTo-Json

$tenantInfo = (Invoke-RestMethod -Uri $uri –Headers $headerParams –Method Post –Verbose -Body $jsonBody)

2. 通过PnP PowerShell为外部用户授予列表文件夹权限

通过证书或客户端密钥连接到SharePoint站点,为已添加的外部用户分配文件夹权限:

cls
$SiteURL="https://your_domain.sharepoint.com/sites/your_site/"
$ClientID = "00000000-0000-0000-0000-000000000000"

$tenant="your_domain.onmicrosoft.com"
$ClientSecret = "base_64 string here"

# 连接到SharePoint站点(使用证书方式)
$conn=Connect-PnPOnline -Url $SiteURL -ClientId $ClientID  -Thumbprint $thumbprint -Tenant $tenant -ReturnConnection

$folder="List folder name"
$externalUser="user_email@gmail.com"

# 若需创建文件夹,可取消注释以下行
#Add-PnPFolder -Name $folder -Folder "Lists/YourList"

# 获取目标文件夹并分配权限
$spFolder = Get-PnPFolder -URL ("/sites/extranet/Lists/YourList/"+$folder)
Set-PnPFolderPermission -List "Outprocessing" -Identity $spFolder -User $externalUser -AddRole "Contribute"

注意:原尝试使用Add-PnPUserToGroup时遇到错误"Entra db error: no inviteEmail for invitation",因此直接使用Set-PnPFolderPermission分配权限。

内容的提问来源于stack exchange,提问作者Adrian Ganea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 11:57:14