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

使用PowerShell在OneDrive创建文件夹遇权限及路径问题求助

问题1:PnP PowerShell连接OneDrive时报403 Forbidden

无法通过PowerShell在OneDrive中创建文件/文件夹,报错:Resolve-PnPFolder : The remote server returned an error: (403) Forbidden。
已尝试用ClientID和密钥连接,收到警告提示客户端密钥属于旧认证方式、功能受限,但已给应用注册添加了几乎所有权限,仍报错。此前用同应用注册通过NuGet包可正常工作,现在必须改用PowerShell。

连接代码:

$OneDriveSiteURL = "https://XXXXtest104-my.sharepoint.com/personal/agileqa_XXXXXtest104_onmicrosoft_com"

Connect-PnPOnline -Url $OneDriveSiteURL -ClientId "3ed262a0-f02e-48f4-9ede-ef90c76aXXXX" -ClientSecret "dAs8Q~XXXXkdmF4bF3UI1Hke2yxtTgXXXX"
问题2:Graph API创建文件夹到SPO而非OneDrive

使用Microsoft Graph API的PowerShell代码能创建文件夹,但文件夹出现在SharePoint Online(SPO)而非目标OneDrive,原因是什么?

相关代码:

$clientId = "XXXXXXXXXXXXXX"
$tenantId = "XXXXXX.onmicrosoft.com"
$clientSecret = 'XXXXXXXXXXXX'

$uri = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token"

$body = @{
    client_id     = $clientId
    scope         = "https://graph.microsoft.com/.default"
    client_secret = $clientSecret
    grant_type    = "client_credentials"
}

$tokenRequest = Invoke-WebRequest -Method Post -Uri $uri -ContentType "application/x-www-form-urlencoded" -Body $body -UseBasicParsing
$token = ($tokenRequest.Content | ConvertFrom-Json).access_token
Write-Host $token

$uri = "https://graph.microsoft.com/v1.0/<ID XXXXXXX>/drive/root/children"
$method = 'POST'
$head= @{Authorization = "Bearer $token"} 
$postPara= @{
name= "NewFolder"
folder= {}
} | ConvertTo-Json

$antwort = Invoke-RestMethod -Headers $head -Uri $uri -Method $method -Body $postPara -ContentType "application/json"
Write-Host $antwort

问题1的解决思路
  • 权限范围未匹配OneDrive需求:即使添加了大量权限,针对OneDrive的PnP操作需要明确的SharePoint应用权限,比如Sites.FullControl.All或Sites.Manage.All,且需确保权限覆盖到目标用户的个人OneDrive站点(全局权限可能未同步到个人站点)。
  • 客户端密钥认证的局限性:PnP的客户端密钥认证属于旧版认证,对OneDrive个人站点的支持有限,即使权限配置正确,也可能无法访问特定资源路径。建议改用证书认证,或在允许的情况下使用委派权限+交互式/用户名密码认证。
  • 未给OneDrive站点单独授权应用:需手动在目标OneDrive站点上给应用分配权限,执行命令:Set-PnPTenantSite -Url $OneDriveSiteURL -AppId $ClientId -Permissions FullControl,这一步常被忽略。
  • 工具间的逻辑差异:之前的NuGet包可能使用Graph API,而PnP PowerShell默认依赖SharePoint CSOM,两者权限要求和认证逻辑不同,导致同应用注册在不同工具下表现不一致。
问题2的原因及解决

你使用的Graph API端点<ID XXXXXXX>/drive/root/children中,若<ID XXXXXXX>是SharePoint站点ID,创建的文件夹自然会落在SPO站点文档库。要指定OneDrive,需用用户ID或用户UPN定位个人驱动器:

  • 正确端点格式:https://graph.microsoft.com/v1.0/users/{user-id-or-upn}/drive/root/children
  • 示例替换:https://graph.microsoft.com/v1.0/users/agileqa_XXXXXtest104_onmicrosoft_com/drive/root/children

另外,客户端凭证模式下,需确保应用注册拥有Files.ReadWrite.All应用权限并完成管理员同意,否则无法访问用户OneDrive。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:12:45