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

使用PowerShell调用Graph API在SharePoint文档库创建文件夹时遭遇400错误请求的技术求助

解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:27:35