使用PowerShell调用Graph API在SharePoint文档库创建文件夹时遭遇400错误请求的技术求助
我之前踩过一模一样的400错误坑,大概率是请求体格式不对导致的,咱们一步步捋着排查和修复:
1. 修复请求体的folder字段问题
你代码里的folder = $null会被ConvertTo-Json转换成"folder": null,但Graph API要求创建文件夹时,folder字段必须是一个空对象而不是null。把这部分改成空哈希表就能解决核心问题:
$uploadFolderRequestBody = @{ name= "NewFolder" folder = @{} # 这里改成空哈希表,生成符合要求的{"folder": {}} "@microsoft.graph.conflictBehavior"= "rename" } | ConvertTo-Json
2. 确认Drive ID的正确性
检查你URL里的(Here I write the drive ID)是否替换成了正确的驱动器ID。如果是站点的文档库,你可以先通过这个API获取对应Drive的ID:
Invoke-RestMethod -Headers $header -Method Get -Uri "https://graph.microsoft.com/v1.0/sites/{你的站点ID}/drives"
找到目标文档库对应的id字段,替换到创建文件夹的URL里。
3. 验证权限是否足够
确保你的访问令牌拥有足够的权限:
- 如果是应用权限,需要
Files.ReadWrite.All或Sites.ReadWrite.All权限,并且已经获得管理员同意 - 如果是委派权限,需要
Files.ReadWrite或Sites.ReadWrite.All权限,并且用户已经完成授权
修正后的完整代码示例
# 包含访问令牌的请求头 $header = @{ Authorization = "Bearer " + $resp.access_token } $CreateFolderURL = "https://graph.microsoft.com/v1.0/drives/{正确的Drive ID}/items/root/children" $uploadFolderRequestBody = @{ name= "NewFolder" folder = @{} "@microsoft.graph.conflictBehavior"= "rename" } | ConvertTo-Json -Compress # 加上-Compress可避免不必要的格式问题(可选) try { $result = Invoke-RestMethod -Headers $header -Method Post -Body $uploadFolderRequestBody -ContentType "application/json" -Uri $CreateFolderURL Write-Host "文件夹创建成功:" $result.id } catch { # 捕获错误详情,方便进一步排查 Write-Host "错误信息:" $_.Exception.Message Write-Host "响应内容:" $_.ErrorDetails.Message }
建议你先在Graph Explorer里测试这个创建请求,确认能正常返回结果后,再迁移到PowerShell代码里,这样能更快定位潜在问题。
内容的提问来源于stack exchange,提问作者mporks
相关产品推荐
相关产品推荐

