PnP PowerShell权限支持取消后,如何为用户分配SharePoint站点权限?
此前使用的PnP PowerShell Grant-PnPAzureADAppSitePermission 功能已被移除,结合你当前正在使用Microsoft Graph API的场景,以下是两种可靠的替代方案:
方案1:使用Microsoft Graph API直接操作
该方案可同时支持给特定用户或Azure AD应用分配站点权限,且与你现有Graph API工作流无缝兼容。
前提条件
调用API的主体(如你的应用)需具备对应权限:
- 分配用户权限:需
Sites.Manage.All或Sites.FullControl.All权限(需管理员同意) - 分配应用权限:需
Sites.Manage.All或Sites.FullControl.All权限(需管理员同意)
1. 为特定用户分配站点权限
调用 POST /sites/{site-id}/permissions 端点,示例请求:
POST https://graph.microsoft.com/v1.0/sites/{site-id}/permissions Content-Type: application/json { "roles": ["write"], // 可替换为read、fullcontrol等权限角色 "grantedToIdentities": [ { "user": { "id": "{user_id}", "displayName": "{user_name}" } } ] }
注:
{site-id}可直接使用站点完整URL(如https://mydomain.sharepoint.com/sites/appname),无需转换为内部ID。
2. 为Azure AD应用分配站点权限
请求示例:
POST https://graph.microsoft.com/v1.0/sites/{site-id}/permissions Content-Type: application/json { "roles": ["write"], "grantedToIdentities": [ { "application": { "id": "{client_id}", "displayName": "{app_name}" } } ] }
方案2:使用Microsoft Graph PowerShell模块
若你偏好PowerShell操作,可使用Microsoft Graph PowerShell模块替代旧版PnP命令:
步骤1:安装并连接Graph模块
# 安装模块(首次使用) Install-Module Microsoft.Graph -Scope CurrentUser -Force # 连接Graph,请求必要权限 Connect-MgGraph -Scopes "Sites.Manage.All"
步骤2:为特定用户分配站点权限
# 定义参数 $siteUrl = "https://mydomain.sharepoint.com/sites/appname" $userId = "{user_id}" $userDisplayName = "{user_name}" $permissionRole = "write" # 获取站点ID(或直接使用URL作为SiteId参数) $site = Get-MgSite -Filter "webUrl eq '$siteUrl'" $siteId = $site.Id # 创建权限请求体 $permissionBody = @{ Roles = @($permissionRole) GrantedToIdentities = @( @{ User = @{ Id = $userId DisplayName = $userDisplayName } } ) } # 执行权限分配 New-MgSitePermission -SiteId $siteId -BodyParameter $permissionBody
步骤3:为Azure AD应用分配站点权限
# 定义参数 $siteUrl = "https://mydomain.sharepoint.com/sites/appname" $appId = "{client_id}" $appDisplayName = "{app_name}" $permissionRole = "write" $site = Get-MgSite -Filter "webUrl eq '$siteUrl'" $siteId = $site.Id $permissionBody = @{ Roles = @($permissionRole) GrantedToIdentities = @( @{ Application = @{ Id = $appId DisplayName = $appDisplayName } } ) } New-MgSitePermission -SiteId $siteId -BodyParameter $permissionBody
验证权限分配结果
可通过以下方式验证权限是否生效:
# 查看指定站点的所有权限 Get-MgSitePermission -SiteId $siteId
内容的提问来源于stack exchange,提问作者Pooja Parmar
相关产品推荐
相关产品推荐

